在路由中使用外键

时间:2013-12-02 07:27:52

标签: ruby-on-rails

我有一些文章,每个文章都有一个“显示”页面。我正在制作它,所以每篇文章也在节目页面上都有一些评论。我为评论设置了“创建”操作,但我需要在评论控制器的“创建”操作中添加“重定向”。

我希望重定向转到新创建的评论所属的文章的显示页面。

我该怎么写这个redirect_to语句?

这是我到目前为止所拥有的:

def create
  @comment = Comment.new(comment_params)
  if @comment.save
    @article = ?________?
    redirect_to @article
  end
end

我感谢你的帮助,因为我已经被这个概念迷惑了很久,真的很期待能够超越这个驼峰。

1 个答案:

答案 0 :(得分:2)

如果您的关系设置正确并且路线定义正确,这是一项非常简单的任务。

你的模特应该(至少):

class Article < ActiveRecord::Base
  has_many :comments
end

class Comment < ActiveRecord::Base
  belongs_to :article
end

这确保了每个模型上正确的辅助方法。现在定义您的路线,以便评论属于文章:

// somewhere in routes.rb
resources :articles do
  resources :comments
end

这将为您提供嵌套路线,最值得注意的是所需的创建路线:

POST /articles/:article_id/comments

您可以在哪里指导您的评论作品,您的创建现在将如下所示:

// Comments controller
def create
  @article = Article.find(params[:article_id]) # Probably should verify this gets something
  if @comment = @article.comments.create(comment_params)
    redirect_to article_path(@article)
  else
    render :new
  end
end

这应该解决你的问题。 (如果有任何语法问题或其他混淆请告诉我 - 这是从内存中提取的。)