我正在使用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.[]
答案 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 -%>