我有三个关系模型:Forum
,Topic
和Post
。我想要修改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
答案 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 'Изменить'
希望这有帮助!