2011-04-30 178 views
0

我on Rails的版本3.我定义了下面的辅助方法的选择使用Ruby:下拉选择,选择的选项

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 

我的问题是,怎么和我得到的下拉菜单中选择用户。

那仁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.[] 
+0

你可以把你的形式,你正在使用下拉? – 2011-04-30 18:57:26

+0

下拉菜单正在呈现在'index.html.erb'中。这是在问题。 – 2011-04-30 19:01:39

回答

1

PARAMS [:用户] [:ID]会给你所选用户的ID,所以你需要找到使用该ID的用户。

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

编辑:

也确保您要访问它作为PARAMS [:用户] [:编号],而不是PARAMS [用户] [ID]

更新:

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

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

它没有工作。看到我的问题上面的错误返回。 – 2011-04-30 18:53:58

+0

如果您的下拉列表正在索引文件中呈现,那么您如何将其选定值传递给服务器?你需要将它传递给服务器。当你的点击行为被调用? – 2011-04-30 19:09:53

+0

在索引文件中,我有一个调用点击操作的按钮。我如何将选定的值传递给服务器? – 2011-04-30 19:12:54