Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/59.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 在Rails中,哪些良好的视图特定设计模式使处理许多状态变得更容易?_Ruby On Rails_Design Patterns_Frontend - Fatal编程技术网

Ruby on rails 在Rails中,哪些良好的视图特定设计模式使处理许多状态变得更容易?

Ruby on rails 在Rails中,哪些良好的视图特定设计模式使处理许多状态变得更容易?,ruby-on-rails,design-patterns,frontend,Ruby On Rails,Design Patterns,Frontend,我想消除的反模式是: - if !current_user # do something - if !member # do something else - if admin # blah blah blah - else # Bored now. 我怀疑答案与视图助手和部分有关,但我想知道一些最佳实践和设计模式是什么。谢谢 我在控制器上做了很多事情: before_filter :require_user def require_user unless current

我想消除的反模式是:

- if !current_user
  # do something
- if !member
  # do something else
- if admin
  # blah blah blah
- else
  # Bored now.

我怀疑答案与视图助手和部分有关,但我想知道一些最佳实践和设计模式是什么。谢谢

我在控制器上做了很多事情:

before_filter :require_user

def require_user
  unless current_user
    store_location
    flash[:notice] = "You must be logged in to access this page"
    redirect_to login_url
    return false
  end
end

但根据您的角色(管理员、用户、成员),您可以执行相同的任务。这样,在渲染视图之前,您的控制器将负责它们的指向。

谢谢Trip,我想我的用例更多的是基于当前用户的状态,向用户显示灰色按钮、禁用按钮、蓝色按钮还是完全没有按钮。这不是权限或访问控制的问题。您不能通过控制器通过before_筛选器完成相同的任务吗。根据这种方法的情况,它适用于他们在视图中看到的按钮?我可能可以,但我不喜欢在控制器中放置视图相关代码的想法。我在控制器中检查权限,但在我的例子中,UI的许多状态与权限无关,与用户已经或尚未完成的操作有关。在这种情况下,我希望根据用户状态进行切换,或者呈现不同的部分,使用不同的CSS类名,或者只是显示不同的文本。