Выпадающий селектор, выбранная опция

#ruby-on-rails #select

#ruby-on-rails #выберите

Вопрос:

Я использую Ruby on Rails версии 3. Я определил следующий вспомогательный метод для селектора:

   def current_user_selector
    collection_select(:user, :id, User.all, :id, :name, {:prompt => "Select a User"});
  end
  

Я ввел вышеупомянутый селектор в моем index.html.erb :

 ...
<%= current_user_selector %>
...
  

Я где-то читал, что к выбранной опции из выпадающего меню можно получить доступ в контроллере с помощью:

 selected_user = params[user][id]
  

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

В настоящее время у меня есть это в следующем действии:

   # GET /users/:id/click
  # GET /users/:id/click.xml
  def click
    @user = User.find(params[:id])
    @users_to_click = User.where("clicks_given - clicks_received >= ?", -5).order("clicks_given - clicks_received")
    selected_user = params[user][id]

    respond_to do |format|
      format.html # click.html.erb
      format.xml  { render :xml => @user }
    end
  end
  

Мой вопрос в том, как и я получаю выбранного пользователя из выпадающего меню.

Нарен Сисодия привел меня к следующему исключению:

 You have a nil object when you didn't expect it!
You might have expected an instance of ActiveRecord::Base.
The error occurred while evaluating nil.[]
  

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

1. можете ли вы поместить форму туда, где вы используете выпадающий список?

2. Выпадающее меню отображается в index.html.erb . Это в вопросе.

Ответ №1:

параметры [:user] [:id] выдадут вам идентификатор выбранного пользователя, поэтому вам нужно найти пользователя по этому идентификатору.

 selected_user = User.find(params[:user][:id])
  

Редактировать:

также убедитесь, что вы обращаетесь к нему как params[:user] [:id] вместо params[user][id]

Обновить:

вам нужно передать выбранное значение на сервер, как вы упомянули, у вас есть кнопка, которая вызывает действие щелчка. Теперь вы можете создать из с помощью выпадающего списка и одной кнопки отправки; что-то вроде

 <%= form_tag('/click',:method=>'get') do -%>
 <%= current_user_selector %>
 <%= submit_tag 'Get Selected' %>
<% end -%>
  

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

1. Это не сработало. Возвращаемую ошибку смотрите в моем вопросе выше.

2. Если ваш выпадающий список отображается в индексном файле, то как вы передаете его выбранное значение на сервер? вам нужно передать его на сервер. и когда вызывается ваше действие click?

3. В индексном файле у меня есть кнопка, которая вызывает действие щелчка. Как мне передать выбранное значение на сервер?

4. вы можете создать форму, которая включает выпадающий список и вашу кнопку, кнопка будет кнопкой отправки формы. Действие формы должно соответствовать вашему действию щелчка.

5. Это снова я, разве нельзя было бы сгенерировать выпадающее меню с помощью JS и получить выбранного пользователя с помощью JS? Избегание отправки формы. Это потому, что текущий пользователь также используется другим пользователем, который вызывает действие щелчка. Я загрузил свое приложение на github ( github.com/TiagoVeloso/clicker/tree/master/app ) таким образом, вы можете видеть, что используется.