Rails - 视图中的逻辑太多了?

时间:2009-11-18 00:35:54

标签: ruby-on-rails controller views

我有几个组织使用的应用程序,我想检查一个域(a.domain.com)的用户是否无法编辑其他域(b.domain.com)的用户。我的问题是在前置过滤器或视图中放置逻辑?

查看:

<% if @user.websites.detect {|website| website.url == request.host} %>
  render :partial => 'form'
<% else %>
  render :partial => 'no_access'
<% end %>

或者,在控制器中:

before_filter :verify_editable_user, :only => ['edit', 'update', 'delete']
protected
def verify_editable_user
  @user = User.find(params[:id], :include => 'websites')
  unless @user.websites.detect {|website| website.url == request.host}
    render 'no_access'
  end
end

在这种情况下,第一个版本对我来说感觉更清洁。然而,第二个看起来更像MVC场景。你怎么看?我离开基地了吗?提前谢谢。

4 个答案:

答案 0 :(得分:0)

我建议使用lockdown gem进行授权。 (见http://stonean.com/

第二个实际上更清洁。

答案 1 :(得分:0)

要结帐的其他授权宝石将是CanCanacl9

答案 2 :(得分:0)

您不应在视图中放置逻辑。在控制器中而不是在视图中使用逻辑实际上会使您的测试更容易......

答案 3 :(得分:0)

我建议before_filteracl9。还使用presenters从视图中获取代码并将其转换为可测试的ruby对象