在Rails中管理操作按钮状态的最佳实践

时间:2012-02-27 19:13:41

标签: ruby-on-rails ruby-on-rails-3

我是Rails和Web开发的新手。我正在尝试更好地了解在我的视图上呈现不同按钮的选项有哪些,具体取决于哪个用户正在访问页面。我正在使用Rails 3.2。

我的两个具体案例:

  1. 在我的电影页面上,我想显示一个书签按钮。按钮应该说“添加书签”,如果用户没有登录或者电影不在用户的书签列表中,则不应该检查。如果用户在她的书签中添加了电影,该按钮应该说“删除书签”并进行检查(使用“活动”css类)。

  2. 如果用户搜索“动作片”,则视图会显示影片列表。列表中的每个项目都应显示“添加书签”/“删除书签”按钮,具体取决于电影是否在用户的书签列表中。

  3. 根据用户状态管理按钮文本,操作和显示的最佳做法是什么?代码在哪里(view,javascript ...),以及我需要实现哪些关键方法?

1 个答案:

答案 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) %>

否则,你将在你的观点中重复这种逻辑并不好。

显然,其中一些是假代码,但我认为你会有所偏差。