下拉选择器,选中的选项

时间:2011-04-30 18:30:11

标签: ruby-on-rails select

我正在使用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

我的问题是,如何和我从下拉菜单中选择用户。

Naren Sisodiya带我到以下例外:

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 个答案:

答案 0 :(得分:1)

params [:user] [:id]将为您提供所选用户的ID,因此您需要找到使用此ID的用户。

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

修改

还要确保您以params [:user] [:id]的形式访问它而不是params [user] [id]

<强>更新

您需要将所选值传递给服务器,正如您所提到的,您有一个调用点击操作的按钮。现在您可以使用下拉菜单和一个提交按钮创建一个from;

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