Итак, я пытаюсь создать форму, которая имеет
f.collection_select
, где вместо вызова Model.all
я звоню Model.find_by(roles: "site_admin")
, но, проведя целую жизнь в консоли рельсов, я не могу понять,это вне.
... models ...
Class User
has_many :listings
petergate(roles: [:site_admin], multiple: true)
end
class Listing
belongs_to :user
end
Я использую камень petergate , чтобы дать пользователю атрибут ролей, который может быть: site_admin, или: user
консоль rails
irb(main):001:0> User.first.roles
User Load (0.6ms) SELECT "users".* FROM "users" ORDER BY "users"."id" ASC LIMIT $1 [["LIMIT", 1]]
=> [:site_admin, :user]
Моя форма
<%= f.label :listing_agent %>
<%= f.collection_select(:user_id, User.all, :id, :name ) %>
Это работает, но в раскрывающемся меню отображаются все пользователи из User.all
Мой вопрос заключается в том, есть ли способ, которым я вместо звонка User.all
могу позвонить что-то вроде User.find_by(roles: "site_admin")
, чтобы отобразить только пользователей, которые играют роль: site_admin?
Я был на консоли рельсов, пытаясь использовать любую возможную комбинацию, чтобы выбрать роль, но я не могу ее получить.
Я думаю, что, может быть, это что-то сдрагоценный камень petergate, и что attritubute ролей: site_admin как символ, а не «site_admin» как строка.
I 'Мы также пробовали в форме
<%= f.collection_select((:user_id, User.all, :id, :name) if user.roles.first === :site_admin ) %>
<%= f.collection_select((:user_id, ( User.all.map { |user| user if user.roles.first === :site_admin } ), :id, :name) if user.roles.first === :site_admin ) %>
Я не уверен, куда идти дальше, кроме необходимости добавить совершенно новый столбец в таблицу Users в БД, к которой я могу сделать запрос.ТИА