嵌套def编辑未定义的方法错误

时间:2015-11-11 17:42:59

标签: ruby-on-rails ruby ruby-on-rails-3 ruby-on-rails-4

我有三个关系模型:ForumTopicPost。我想要修改Post

这是Post_controller:

def update
  @forum = Forum.find params[:forum_id]
  @topic = Topic.find params[:topic_id]
  @post = @topic.posts.find(params[:id])
  if @post.update(post_params)
    redirect_to forum_topic_path(@forum.id, @topic.id)
  end
end

def edit
  @forum = Forum.find params[:forum_id]
  @topic = Topic.find params[:topic_id]
  @post = Post.find(params[:id])
end

这是edit.html.slim:

= simple_form_for ([@forum, @topics, @topics.posts.build]) do |f|
  div.new_message
    p 
        b Ответ в тему  
    = f.label 'Текст сообщения:'
    = f.text_area :content,rows: '15', cols: '82' 
    div.forum_button
      = f.submit 'Изменить' 

这是错误:

NoMethodError in Posts#edit

undefined method `posts' for nil:NilClass

2 个答案:

答案 0 :(得分:1)

实例变量在控制器的@topic操作中定义为@topics edit。 这就是您致电时提出上述错误的原因:@topics.posts.build

您应在视图中使用@topic代替@topics

= simple_form_for ([@forum, @topic, @topic.posts.build]) do |f|

答案 1 :(得分:0)

你需要修复两个地方:

将@topics替换为@topic

= simple_form_for ([@forum, @topic, @topic.posts.build]) do |f|
  div.new_message
    p 
        b Ответ в тему  
    = f.label 'Текст сообщения:'
    = f.text_area :content,rows: '15', cols: '82' 
    div.forum_button
      = f.submit 'Изменить' 

希望这有帮助!