Ruby on rails 基于模型属性渲染局部对象
只是想知道是否有办法使下面的代码更简洁Ruby on rails 基于模型属性渲染局部对象,ruby-on-rails,Ruby On Rails,只是想知道是否有办法使下面的代码更简洁 <% @users.each do |user| %> <%= render partial: "#{user.state}_user", locals: { user: user } %> <% end %> 每个用户都有一个状态(active或inactive),对于每个用户,都有正确的部分(\u active\u user.hmtl.erb或\u inactive\u user.html.erb需要呈现)
<% @users.each do |user| %>
<%= render partial: "#{user.state}_user", locals: { user: user } %>
<% end %>
每个用户都有一个状态(active
或inactive
),对于每个用户,都有正确的部分(\u active\u user.hmtl.erb
或\u inactive\u user.html.erb
需要呈现)
正在寻找使用集合
,但我找不到任何样本 您可以重写render隐式查找部分的方式:
class User < ApplicationRecord
# ...
def to_partial_path
"users/#{state}_user"
end
end
class用户
但这将覆盖其在任何地方隐式呈现的方式,而这可能是不可取的。否则,我会质疑你是否真的需要让它更简洁——你所做的是越轨的,最好是让代码清楚地显示它的意图,而不是过于聪明/强制干涸
您没有找到任何使用collection的示例的原因是它不起作用。它在集合中迭代,并在每个成员上调用
#到_partial_path
谢谢你的回复。我不喜欢将覆盖到_partial_path
的想法,特别是因为它在模型中不应该关心视图(不过我可以将它放在演示者中)。我只是想为收藏寻找一个选项,如果有的话。