0

我正在尝试使用 Ruby on Rails 编写一个论坛。

在模型方面,我完成了主题和论坛之间的关联

# forum.rb
class Forum < ActiveRecord::Base
  has_many :topics

  attr_accessible :name, :description
end

# topic.rb
class Topic < ActiveRecord::Base
  has_many :posts
  belongs_to :forum
end

论坛控制器

# forums_controller.rb
class ForumsController < ApplicationController
  def new
    @forum = Forum.new
  end

  def create
    @forum = Forum.new(params[:forum])
    if @forum.save
      flash[:success] = "Success!"
      redirect_to @forum
    else
      render 'new'
    end
  end

  def index
    @forums = Forum.all
  end

  def show
    @forum = Forum.find(params[:id])
  end
end

主题控制器

class TopicsController < ApplicationController
  def new
    @topic = current_forum???.topics.build
  end

  def create
    @topic = Topic.new(params[:topic])
    if @topic.save
      flash[:success] = "Success!"
      redirect_to @topic
    else
      render 'new'
    end
  end

  def index
    @topics = Topic.all
  end

  def show
    @topic = Topic.find(params[:id])
  end
end

如何更改主题控制器以确保主题是为当前new论坛而不是其他论坛创建的?create

例如,如果我从一个 id=1 的论坛创建一个新主题,我如何确保创建的新主题的 forum_id=1?

4

2 回答 2

2

使用嵌套资源

resources :forums do
  resources :topics
end

你会有一条像

/forums/:forum_id/topics/new

然后在你的TopicsController

def new
  @forum = Forum.find(params[:forum_id])
  @topic = @forum.topics.build
end
于 2012-06-06T08:23:04.930 回答
1
class TopicsController < ApplicationController
  def new
    @forum = Forum.find(params[:id])
    @topic = @forum.topics.build
  end
于 2012-06-06T08:18:23.990 回答