Ruby on rails 编辑rails中的注释等嵌入式资源(家庭作业)

Ruby on rails 编辑rails中的注释等嵌入式资源(家庭作业),ruby-on-rails,nested-resources,Ruby On Rails,Nested Resources,我正在大学学习rails课程,请原谅我的无知。我们必须制定一个项目,用户可以参加并评论活动。我几乎完成了,但有一件事我似乎无法开始工作,那就是编辑一条评论,这当然取决于一个事件 到目前为止,我得到的是:在我的评论控制器中: def edit @event = Event.find(params[:event_id]) @comment = @event.comments.find(params[:id]) end def update @event = Event.find(par

我正在大学学习rails课程,请原谅我的无知。我们必须制定一个项目,用户可以参加并评论活动。我几乎完成了,但有一件事我似乎无法开始工作,那就是编辑一条评论,这当然取决于一个事件

到目前为止,我得到的是:在我的评论控制器中:

def edit
  @event = Event.find(params[:event_id])
  @comment = @event.comments.find(params[:id])
end

def update
  @event = Event.find(params[:event_id])
  @comment = @event.comments.find(params[:id])

  if @comment.update(params[:comment].permit(:user_id, :message))
    redirect_to @event
  else
    render 'edit'
  end
end
指向部分注释/_comment.html.erb中编辑页面的链接(我使用
rake routes
中显示的路径)

此时发生的情况是,表单在单击链接时呈现,但表单显示为空,提交时会创建新注释,而不是更新当前注释。通过阅读其他SO问题,我确信我必须以不同的方式调用
表单来解决这个问题,但我不知道如何解决。有人能帮忙吗?谢谢

更换

<%= form_for([@event, @event.comments.build]) do |f| %>


当您说
@event.comments.build
时,它将创建一个新的comment实例,并在提交表单时在数据库中创建一个新的comment。 为了更新现有注释,在
edit
操作中,您设置了
@comment
实例变量,该变量是您要编辑的注释。因此,您需要在
表单_中为
指定一个


询问者的完整性编辑(见评论):我在事件的show action中嵌入了一个注释表单,因此我还必须在事件的show action中使用
comment.new
初始化注释。

现在,在呈现
事件/show.html.erb
时,表单中的
第一个参数不能包含nil或为空,即使
@comment
@event
都已按上述方式初始化…您是否已在CommentsController的show action中初始化了
@event
@comment
实例变量?您需要这样做。
@event
当然是初始化的,但是如何初始化注释呢?仅通过
@event.comments.create(参数[:comment].permit(:user_id,:message))
?这为nil:NilClass给出了一个
未定义的方法
permit'-错误。我可能错过了一些非常愚蠢的事情。。。
<%= form_for([@event, @event.comments.build]) do |f| %>

... 

<p>
  <%= f.label :commenter %></br>
  <%= collection_select(:comment, :user_id, User.all, :id, :name_with_id, {}) %>
</p>


<p>
  <%= f.label :message  %><br />
  <%= f.text_area :message %> <br />
</p>

<p>
  <%= f.submit %>
</p>

<% end %>
<%= form_for([@event, @event.comments.build]) do |f| %>
<%= form_for([@event, @comment]) do |f| %>