Как я могу использовать collection_select в form_for для выбора моделей с определенным атрибутом в массиве атрибутов?Рельсы 5 форм - PullRequest
0 голосов
/ 08 февраля 2019

Итак, я пытаюсь создать форму, которая имеет

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 в БД, к которой я могу сделать запрос.ТИА

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