我正在尝试创建助手以清理我的观点。我创建一个只允许帖子的所有者编辑或删除它。
module ConversationsHelper
def editing_for_current_user (convo)
if current_user == convo.user
link_to 'Edit', edit_conversation_path(convo), class: 'btn btn-primary btn-sm'
link_to 'Delete', convo, method: :delete, data: { confirm: 'Are you sure?' }, class: 'btn btn-primary btn-sm'
end
end
end
这是我的观点:
<div class="row">
<% @conversations.each do |conversation| %>
<div class="col-sm-6 col-md-4">
<div class="thumbnail">
<h3><%= link_to conversation.title, conversation %></h2>
<p>Comments: <span class='badge'><%= conversation.comments.count %></span></p>
<p><%= conversation.description %></p>
<p><b>Submitted by:</b> <%= link_to conversation.user.username, user_path(conversation.user.id) %></p>
<h3> Recent comments: </h3>
<hr>
<% conversation.comments.sort_by{|t| - t.created_at.to_i}.take(3).each do |c| %>
<div class='media'>
<%= image_tag c.user.profile_pic.url(:thumb), class: 'media-object pull-left img-polaroid' %>
<div class='media-body'>
<h4 class='media-heading'><%= link_to c.user.username, user_path(c.user.id) %><small> @ <%=c.created_at.strftime("%m/%d/%Y at %I:%M%p") %></small></h4>
<%= simple_format(c.message) %>
</div>
</div>
<hr>
<% end %>
<%= editing_for_current_user(conversation) %>
</div>
</div>
<% end %>
但是,只显示“删除”链接。有没有办法在不创建其他方法的情况下同时显示link_to?
提前致谢。
答案 0 :(得分:0)
这种事情在某种程度上更好地处理。你想要的是你的视图目录中的另一个文件,如下所示:
_edit_links.html.erb
<%= link_to 'Edit', edit_conversation_path(conversation), class: 'btn btn-primary btn-sm '%>
<%= link_to 'Delete', conversation, method: :delete, data: { confirm: 'Are you sure?' }, class: 'btn btn-primary btn-sm' %>
然后在你的对话节目中(或你在那里的任何一个文件):
<%= render "edit_links" if current_user == conversation.user %>
当您想要在展示页面上拆分内容以使其更具可读性和/或可维护性时,应使用部分。当您拥有更多复杂的方法时,助手非常有用。例如,如果您正在检查某个对象是否属于多次签名的人,您可以编写一个这样的帮助方法:
def belongs_to_current_user rec
current_user == rec.user
end