我正在尝试从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
行。一旦我将其删除,现在一切正常。
答案 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'