【问题标题】:Best practices to manage action button status in Rails在 Rails 中管理操作按钮状态的最佳实践
【发布时间】:2012-02-28 03:20:41
【问题描述】:
我是 Rails 和一般 Web 开发的新手。我试图更好地了解哪些选项可以根据访问页面的用户在我的视图上呈现不同的按钮。我正在使用 Rails 3.2。
我的2个具体案例:
在我的电影页面上,我想显示一个书签按钮。如果用户未登录或电影不在用户的书签列表中,则该按钮应显示“添加书签”并且不被选中。如果用户在她的书签中添加了电影,则该按钮应显示“删除书签”并被选中(使用“活动”css 类)。
如果用户搜索“动作电影”,视图会呈现电影列表。列表的每个项目都应显示“添加书签”/“删除书签”按钮,具体取决于电影是否在用户的书签列表中。
根据我的用户状态管理按钮文本、操作和显示的最佳做法是什么?代码在哪里(视图、javascript...),我需要实现哪些关键方法?
【问题讨论】:
标签:
ruby-on-rails
ruby-on-rails-3
【解决方案1】:
嗯,最佳实践是使用 Draper:https://github.com/jcasimir/draper 之类的东西,它负责根据一组条件呈现正确的内容。
但是这会起作用,但应该可以重构为 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) %>
否则,您将在所有视图中重复该逻辑,这是不好的。
显然其中一些是伪代码,但我想你明白我的意思。