2013-11-01 79 views
0

我目前正在创建一个包含3个主要资源的应用程序::products,:contacts:items。 访问者只能使用公共RESTful方法(如indexshow)访问它们。Rails避免重复控制器(DRY)

另一方面,登录用户可以访问任何RESTFul操作。问题在于,对于indexshow的看法取决于访问者或用户是不同的。

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

我应该怎么做才能让单个控制器实现这一目标?或者围绕它的最佳实践是什么?

非常感谢

+0

我建议设计:http://stackoverflow.com/questions/4769402/devise-action-filter-for-actions-that-require-authentication。你能否详细说明这个问题:“问题是,索引和展示的观点根据访问者或用户的不同而不同。”这些行为应该以何种方式改变? –

+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而不是试图推出自己的登录系统的建议。