我有一张桌子,想要设置默认值
这是表格:
|customers|
|id| |name|
1 ABC
2 DEF
3 GHI
4 JKL
这是控制器:
@customers.Customer.all
@customer_selected = Customer.find(:all,:conditions=>['id=1'])
以下是显示所有客户的视图
<%= select_tag "customer_id", options_for_select(@customers.collect {|t| [t.name,t.id]},params[:customer_id].to_i) %>
我尝试使用此行选择customer_id = 1作为默认值(已选择)
<%= select_tag "customer_id", options_for_select(@customers.collect {|t| [t.name,t.id]},params[:customer_id].to_i),:selected =>@customer_selected.name %>
我收到此错误
undefined method `name' for #<Array:0x7f31d8098560>
请有人可以帮帮我吗?
答案 0 :(得分:1)
要记住的一件事是,如果params [:customer_id]不存在,那么它将等于nil,而nil.to_i
给出0.这应该没问题,因为你不应该有ID为0的客户,但需要注意的事项。
我认为这应该有效:
<% default_id = params[:customer_id] ? params[:customer_id].to_i : (@customer_selected && @customer_selected.id) %>
<%= select_tag "customer_id", options_for_select(@customers.collect {|t| [t.name,t.id]}, default_id) %>
如果已定义,则会使用params[:customer_id]
;如果定义了@customer_selected.id
,则会使用@customer_selected
。
答案 1 :(得分:0)
@customer_selected
是一个数组,正如错误所述。这是因为find(:all)
返回一个数组,即使只有一个结果。
您应该可以替换
@customer_selected = Customer.find(:all,:conditions=>['id=1'])
与
@customer_selected = Customer.find(1)
不破坏任何内容,因为find
无论如何都会根据ID查找对象并返回单个记录而不是集合。