Rails避免重复控制器(DRY)

时间:2013-11-01 04:25:17

标签: ruby-on-rails dry

我目前正在创建一个包含3个主要资源的应用::products:contacts:items。 访问者只能使用公共RESTful方法访问所有这些方法,例如indexshow

另一方面,已登录用户可以访问任何RESTFul操作。问题是,indexshow的观看次数各不相同,具体取决于访问者或用户。

我的问题是,实际上我正在考虑将我的控制器复制到仅与已登录用户相关的命名空间user。我知道这不是一个好主意,因为它根本不是干的。

我应该如何保持一个控制器来实现这一目标?或者围绕它的最佳实践是什么?

非常感谢

1 个答案:

答案 0 :(得分:0)

如果登录用户和未登录用户之间的区别很小,只需在视图中添加一些条件:

<% if logged_in %>
  <p>You are logged in!</p>
<% else %>
  <p>You're not logged in.</p>
<% end %>

如果差异很大,你可能想要创建两个单独的视图(例如/contacts/index.html.erb/contacts/public_index.html.erb),一个用于登录用户,一个用于非记录用户,然后将逻辑放入你的控制器:

def index

  ... your logic goes here

  if logged_in
    render 'index'
  else
    render 'public_index'
  end
end

显然,您的实施方式会有所不同,具体取决于您的登录系统的实施方式,但这就是它的要点。

PS我在上面推荐你使用Devise而不是试图推出自己的登录系统。