Визуализация частичного на основе атрибута модели - PullRequest
0 голосов
/ 02 апреля 2020

Просто интересно, есть ли способ сделать следующий код более лаконичным

<% @users.each do |user| %>
  <%= render partial: "#{user.state}_user", locals: { user: user } %>
<% end %>

У каждого пользователя есть состояние (либо active, либо inactive), и для каждого пользователя есть правильное частичное (_active_user.hmtl.erb или _inactive_user.html.erb необходимо обработать).

Требуется использовать collection, но я не могу найти образец.

1 Ответ

1 голос
/ 02 апреля 2020

Вы можете переопределить ActiveModel::Conversion#to_partial_path, то есть как рендер неявно ищет частичное:

class User < ApplicationRecord
  # ...
  def to_partial_path
     "users/#{state}_user"
  end
end

Но это переопределит то, как оно рендерится неявно везде, что может быть нежелательно. В противном случае я бы задал вопрос, действительно ли вам нужно сделать это более лаконичным - то, что вы делаете, - это не по пути, и лучше иметь код, который ясно показывает его намерение, а не что-то слишком умное / принудительно СУХОЕ.

Причина, по которой вы не нашли примеров использования коллекции, заключается в том, что она не будет работать. Он перебирает коллекцию и вызывает #to_partial_path для каждого члена.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...