Ruby on rails 编辑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
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| %>