如何在select标签中设置默认值?

时间:2014-06-02 15:25:41

标签: ruby-on-rails ruby ruby-on-rails-2

我有一张桌子,想要设置默认值

这是表格:

|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>    

请有人可以帮帮我吗?

2 个答案:

答案 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查找对象并返回单个记录而不是集合。