我不明白为什么这个带有options_from_collection_for_select的f.select的Ruby on Rails代码不起作用

时间:2016-02-19 15:09:47

标签: ruby-on-rails ruby

我是Rails(4.2.4)上的Ruby(2.2.3)的新手,我正在尝试一些新的代码。当我输入下面的代码时,我收到以下错误。

代码:

     <%= f.select (:food_preference_id,
     options_from_collection_for_select(FoodPreference.all, :id, :name),
     {:prompt => 'Please Choose'}, {:class => "form-control"})  
     %>

错误:

      > syntax error, unexpected ',', expecting ')' 

错误引用逗号:food_preference_id。

但是当我输入没有括号的代码(如下所示)时,它可以正常工作

<%= f.select :food_preference_id,
 options_from_collection_for_select(FoodPreference.all, :id, :name),
 {:prompt => 'Please Choose'}, 
 {:class => "form-control"}  
%>

我不明白为什么代码在没有括号的情况下工作,并且不能使用括号。有人可以帮助我理解。提前谢谢。

2 个答案:

答案 0 :(得分:4)

方法名称与括号之间不能包含空格

f.select (:food_preference_id
        ^^

编写代码

 <%= f.select(:food_preference_id,
     options_from_collection_for_select(FoodPreference.all, :id, :name),
     {:prompt => 'Please Choose'}, {:class => "form-control"})  
 %>

答案 1 :(得分:0)

很棒,Arup!

对于OP,要理解的是.select是对f语句创建的表单构建器对象(form_for :object do |f|)的方法调用。 (或者您正在使用的任何变体。)

使用括号中包含的参数(或参数,无论哪个)调用方法时,初始括号必须紧跟方法名称。所以,正如Arup指出的那样,

this.is(:okay)

this.is (:not_okay)

但是,您不需要使用括号。所以,

this.is :also_okay