避免将逻辑放在视图上以在条件下显示元素



鉴于最好避免查看逻辑。

假设我有一个只想向管理员显示的按钮。

在我看来,我会这样做:

<% if current_user.admin_role? %>
button
<% end %>

有没有办法从视图中删除 if 语句并达到相同的结果?以rails的方式,可能没有javascript?

正如我的评论中所述:

是的,使用演示者。有一个关于这个主题的RailsCast可以帮助你入门。

我想补充一点,IMO,一旦你掌握了演示者模式的窍门,它真的超级棒。我的观点现在基本上没有逻辑。而且,我从不访问我视图中的任何模型或模型实例。

事实上,我的演示者也不允许与模型交互。我的控制器也不是。

我有一个名为"经理"的特殊类,负责与模型的所有交互。(另外,我很吝啬让我的模型相互交互,除非是通过AR协会。我的树林里没有accepts_nested_attributes_for。我相信有些人有时称这类对象为"服务"。我也有服务。但这是一个不同的话题。

我的演示者只知道数组、哈希、字符串、整数和类似的东西。他们对模型一无所知。

由于我的控制器将所有内容委托给经理和演示者,因此控制器中的所有操作都如下所示:

def show
do_action_with_presentation
end

或者像这样:

def show
do_action_and_render_result
end

就是这样!控制者有足够的责任,而不要求他们做很多有趣的事情。

这种分离让我有很大的自由度来移动碎片而不会炸毁东西(我擅长)。

最新更新