重定向到Rails中的另一个控制器

时间:2010-04-13 18:02:32

标签: ruby-on-rails redirect controller

我正在尝试从Rails中的一个控制器重定向到另一个控制器,我收到此错误:

  

nil的未定义方法`call':NilClass

代码非常简单(在def create方法中):

@blog_post_comment = BlogPostComment.new(params[:blog_post_comment])

respond_to do |format|
  if @blog_post_comment.save
    flash[:notice] = 'Comment was successfully created.'
    redirect_to(@blog_post_comment.blog_post)
  else
    render :action => "new"
  end
end

保存可以,值进入数据库。我如何解决重定向失败?

形式:

<% form_for @blog_post_comment do |f| %>
    <%= f.hidden_field :blog_post_id %>
...

UPD:

经过一番调查后发现问题出现在respond_to do |format|控制器的blog_post_comment行。一旦我将其删除,现在一切正常。

1 个答案:

答案 0 :(得分:1)

假设您有关联,您可以找到这样的评论:

@blog_post = BlogPost.find(params[:blog_post_id])
@blog_post_comment = @blog_post.comments.build(params[:blog_post_comment])

然后

respond_to do |format|
  if @blog_post_comment.save
    flash[:notice] = 'Comment was successfully created.'
    redirect_to(@blog_post)
  else
    render :action => "new"
  end
end

如果您没有关联,请按照以下方式进行设置:

在BlogPost模型中,您应该拥有以下一行:

has_many :blog_post_comments

在BlogPostComment模型中,您应该:

belongs_to :blog_post

在routes.rb中,您应该:

map.resources :blog_post_comment, :has_many => 'blog_post_comments'