0

我有两个具有各自控制器和视图的模型:ProfileComment.

我的应用程序的整个视图(整个网页)位于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 %>

评论控制器

 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
4

2 回答 2

1

您需要做的就是将评论表单代码添加到 profile#show 中。然后在 profile_controller 的显示操作中执行以下操作:

def show
 @comment = Comment.new
end

并在评论控制器中添加:

def create
 @comment = Comment.create(params[:comment])
end
于 2013-03-22T15:36:09.303 回答
0

您可能会考虑使用 AJAX 调用以及类似Knockout的方法来保存表单并更新页面。因此,在profiles/show.html.erb 中,制作一个常规(单独的)表格,仅用于发表评论。使用 jQuery 或类似的东西通过 AJAX 将表单发布到 /comments,因此它会在您的评论控制器中执行创建操作。让该控制器返回一个 JSON 响应,这将是保存的注释,或者看起来像 {:fieldname => 'too long'} 的错误消息哈希。

在客户端,解析 json 响应并显示保存的注释,或显示错误消息,解释为什么无法保存。你可以在普通的 jQuery 中完成所有这些,但是添加类似 Knockout 的东西会让这一切变得更简单一些。

于 2013-03-22T16:00:57.173 回答