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 的工作方式。
我有一个 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 的工作方式。