UPDATE. Просто чтобы уточнить вещи. Вы получаете эту ошибку, потому что вы передаете один единственный пользователь в качестве коллекции на вход. И, ожидая сбора, он попытается преобразовать все, что вы передали в массив. Но он не сможет правильно преобразовать одного пользователя в массив. Таким образом, вы должны были передать коллекцию пользователей. Например:
<%= f.input :user_id, collection: @users, label: "Associate with", value_method: :id, :include_blank => "Select a user" %>
Конечно, для этого вам нужно, чтобы пользователи без токенов уже были назначены для вашей переменной @users
.
Или, как я понимаю вашу проблему, я могу предложить альтернативу:
Таким образом, предполагая, что у пользователей без токена для столбца token
установлено значение nil, вы можете сделать что-то вроде этого:
<%= f.select :users, options_for_select(@users.where(token: nil).pluck(:name, :id)), include_blank: true %>
Это избавит вас от необходимости явной итерации @users явно и создать вход для каждого из них, т.е. приведенный выше код должен полностью заменить это
<% @users.each do |user| %>
<% if user.token.blank? %>
<%= f.input :user_id, collection: user, label: "Associate with", value_method: :id, :include_blank => "Select a user" %>
<% end %>
<% end %>
Конечно, не стесняйтесь настраивать этого помощника select
так, как вам нужно.
Если вы это сделаете не нужно @users
с токенами где-либо в текущем действии или форме контроллера, вам следует рассмотреть возможность назначения @users = User.where(token: nil)
прямо в действии вашего контроллера.