我有两个具有相应控制器和视图的模型:Profile
和Comment
。
我的应用程序的整个视图(整个网页)位于Profile
show.html.erb
。在此页面上,用户应该能够创建belongs_to
一个Profile
的评论。
如何在不必导航到标准/comments/new
页面的情况下实现这一目标?
修改 按照rails指南,我实现了:
<%= simple_form_for([@profile, @profile.comment.build], html: {class: "form-inline"}) do |f| %>
<%= f.error_notification %>
<%= f.input :description, label: false, placeholder: 'Create an comment', input_html: { class: "span4" } %>
<%= f.submit 'Submit', class: 'btn btn-small'%>
<% end %>
CommentController
def create
@profile = profile.find(params[:profile_id])
@comment = @profile.comments.create(params[:comment])
redirect_to profile_path(@profile)
我收到了这个错误:
undefined method `comment' for #<Profile:
修正:在构建语句中,注释必须是复数
@profile.comments.build
答案 0 :(得分:1)
您需要做的就是将评论表单代码添加到个人资料#show中。然后在profile_controller的show动作中执行以下操作:
def show
@comment = Comment.new
end
在评论控制器中添加:
def create
@comment = Comment.create(params[:comment])
end
答案 1 :(得分:0)
您可以考虑使用AJAX调用保存表单并更新页面,可能还需要Knockout之类的内容。因此,在profiles / show.html.erb中,制作一个常规(单独)表单,仅用于发布评论。使用jQuery或类似的东西通过AJAX将表单发布到/ comments,所以它在你的评论控制器中进行创建操作。让该控制器返回JSON响应,该响应将是保存的注释,或者是类似{:fieldname =&gt;的错误消息的哈希值。 “太长了”}。
在客户端上,解析json响应并显示保存的注释,或显示错误消息,说明无法保存的原因。你可以在普通的jQuery中完成所有这些,但添加像Knockout这样的东西会让它变得更简单。