在一个视图中显示两个模型的数据

时间:2013-03-22 15:26:28

标签: ruby-on-rails associations

我有两个具有相应控制器和视图的模型: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 %>

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

2 个答案:

答案 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这样的东西会让它变得更简单。