значение параметров rails для идентификатора

#ruby-on-rails #html #ruby-on-rails-4

#ruby-on-rails #HTML #ruby-on-rails-4

Вопрос:

Я хотел бы, чтобы значение параметра было изменено с имени пользователя на идентификатор пользователя в значении параметра в html.

Например:

 <option value="John">John</option>
<option value="Jim">Jim</option>
<option value="Kelly">Kelly</option>
<option value="Monica">Monica</option>
<option value="Ralp">Ralp</option>
  

Это то, что выводит мой html, и я бы хотел, чтобы значением был идентификатор пользователя, например:

 <option value="1">John</option>
<option value="2">Jim</option>
<option value="3">Kelly</option>
<option value="4">Monica</option>
<option value="5">Ralp</option>
  

Я также хотел бы, чтобы это было динамичным, чтобы, когда приходит все больше и больше пользователей, мне не приходилось вручную вводить их имена.

Мои rails в настоящее время выглядят следующим образом:

 <%= form_tag '/login', method: 'post' do %>
    Name:
    <br/>
      <%= select_tag :user_id, options_for_select(@users) %>
    <br/>
    <br/>
    <%= submit_tag 'Login' %>
  <% end %>
  

И мой контроллер как таковой:

   def login_user
    user = User.find_by_name(params[:user_id])
    if user
      session[:user_id] = user.id
      redirect_to user_path(user)
      return
    end

    flash[:error] = 'Sorry that user not in the system.'
    redirect_to root_path
  end
  

Не мог бы кто-нибудь, пожалуйста, указать мне правильное направление. Заранее благодарю вас.

Ответ №1:

Я не понимаю, что вы подразумеваете под «динамическим». Но следующее должно исправить вашу проблему с выбором

 <%= form_tag '/login', method: 'post' do %>
    Name:
    <br/>
      <%= select_tag :user_id, options_for_select(User.all.collect{|u| [u.name, u.id]}) %>
    <br/>
    <br/>
    <%= submit_tag 'Login' %>
  <% end %>
  

Комментарии:

1. это то, что я ищу! Спасибо! Однако это выдает мне следующую ошибку: неопределенное имя метода для «John»:String. Вы случайно не знаете, как это исправить?

2. Изменен мой ответ. Я предполагал, что @users — это список пользовательских объектов

Ответ №2:

Понял, я использовал это вместо:

    <%= collection_select(:user, :id, User.all, :id, :name) %>
  

это дало мне выпадающую вкладку со значением пользователя и именем пользователя. Спасибо вам всем!