Cocoon:允许用户只能添加不能编辑

Cocoon: allow users only to add not edit

我有一个 Ticket 模型,它有很多 Comments。在编辑视图中,我允许用户使用 cocoon 添加评论。但是我想确保不能编辑以前的评论。在视图中,我使用一个名为 indexlist 的部分来呈现所有以前的评论(并删除它们)。为简洁起见,我没有包含该代码。所以在我看来

    <h1>Comments</h1>
    <%= render 'comments/indexlist' %>

    <br /><br />
    <%= f.fields_for :comments do |tc| %>
      <%= render partial: 'comment_fields', locals: {f: tc} %>
    <% end %>

    <div>
      <%= link_to_add_association 'Add Comment', f, :comments, :class => "btn btn-primary" %>
    </div>

问题是使用 f.fields_for :comments do |tc| ...是它呈现每个以前的评论,但如果没有它,如果子表单上存在验证错误,则所有数据在表单往返过程中都会丢失。 我确定有一个简单的解决方案...

我猜你需要在 comment_fields

中有一个条件
<% if f.object.user_id == current_user.id %>
  <div class="field">
    <%= f.label :content %>
    <%= f.text_field :content %>
  </div>
<% else %>
  <%= f.object.content %>
<% end %>

这样您就可以编辑自己的评论了。

另一种方法是使用一种纯粹用于票证的表格,并使用 ajax 到 add/edit 评论,而不是使用 cocoon 和 nested_attributes,就像Whosebug 的工作方式。