我是Rails和Web开发的新手。我正在尝试更好地了解在我的视图上呈现不同按钮的选项有哪些,具体取决于哪个用户正在访问页面。我正在使用Rails 3.2。
我的两个具体案例:
在我的电影页面上,我想显示一个书签按钮。按钮应该说“添加书签”,如果用户没有登录或者电影不在用户的书签列表中,则不应该检查。如果用户在她的书签中添加了电影,该按钮应该说“删除书签”并进行检查(使用“活动”css类)。
如果用户搜索“动作片”,则视图会显示影片列表。列表中的每个项目都应显示“添加书签”/“删除书签”按钮,具体取决于电影是否在用户的书签列表中。
根据用户状态管理按钮文本,操作和显示的最佳做法是什么?代码在哪里(view,javascript ...),以及我需要实现哪些关键方法?
答案 0 :(得分:0)
嗯,最好的做法是使用像Draper这样的东西:https://github.com/jcasimir/draper,它负责根据一系列条件呈现正确的内容。
然而,这会起作用,但应该将probalby重构为Draper装饰器:
<% if user.has_bookmarked(@movie) %>
<%= link_to 'Remove bookmark', remove_bookmark_path%>
<% else %>
<%= link_to 'Add bookmark', add_boookmark_path %>
但是再次,在装饰器中你可以做一次
def display_correct_bookmark_link_for_movie(movie)
if current_user.has_bookmarked(movie)
h.link_to 'Remove bookmark', remove_bookmark_path
else
h.link_to 'Add bookmark', add_boookmark_path
end
end
然后在您的视图中,您可以致电:
<%= display_correct_bookmark_link_for_movie(@movie) %>
否则,你将在你的观点中重复这种逻辑并不好。
显然,其中一些是假代码,但我认为你会有所偏差。