Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/56.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 基于模型属性渲染局部对象_Ruby On Rails - Fatal编程技术网

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
的想法,特别是因为它在模型中不应该关心视图(不过我可以将它放在演示者中)。我只是想为
收藏
寻找一个选项,如果有的话。