【发布时间】:2020-05-02 07:46:48
【问题描述】:
我正在与控制器中应该有多少逻辑以及视图中应该有多少逻辑作斗争?
例如,我有一个“切换”链接,可以打开和关闭过滤器。结果是带有一些文本的链接,具体取决于切换的状态以及是否添加了查询参数。
即一种状态
<%= link_to 'With filter', polymorphic_path(Thing, { filtered: 1 }) %>
其他状态
<%= link_to 'Without filter', polymorphic_path(Thing, {}) %>
我在控制器中分配链接标签和查询参数之间犹豫不决,所以我将在视图中没有逻辑,并且两个变量都在控制器中设置...
<%= link_to @filter_link_text, polymorphic_path(Thing, @filter_link_params) %>
但似乎我在控制器中放入了太多视图逻辑
或者控制器设置一个简单的标志并将其余部分留给视图......
<% if @offer_filter %>
<%= link_to 'With filter', polymorphic_path(Thing, { filtered: 1 }) %>
<% else %>
<%= link_to 'Without filter', polymorphic_path(Thing, {}) %>
<% end %>
翻译有帮助吗?
谢谢。
【问题讨论】:
-
@filter_link_params的值取决于什么? -
@SebastianPalma 这是一个切换 - 如果控制器看到它设置在
params中,那么@filter_link_params将为空。如果params为空,则设置@filter_link_params。 -
我可能会在这里回答我自己的问题,不过……如果以后我决定重构 UI 以使其不再是链接怎么办。我可能会添加另一个过滤器,然后可能会添加一组带有整体“过滤器”按钮的复选框?这都应该与视图相关。也许控制器应该做的就是将过滤器的当前状态传递给视图?
-
什么是
Thing?类还是对象? -
@Schwern
Thing是一个模型类。我知道我可以使用things_path,但我想让这个示例保持简单,我的实际代码有嵌套资源,polymorphic_path更容易使用
标签: ruby-on-rails model-view-controller