2016-02-19 40 views
0

我on Rails的(4.2.4)新手红宝石(2.2.3)和我尝试了一些新的代码。当我输入下面的代码时,出现以下错误。我不明白为什么这与options_from_collection_for_select Ruby on Rails的代码f.select不起作用

代码:

 <%= 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"} 
%> 

我不明白为什么代码工作没有括号,并不会与括号工作。有人可以帮助我理解。提前致谢。

回答

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"}) 
%> 
+0

感谢奥雅纳。这工作。不知道我是如何忽略这一点的。 –

0

大有赶超,奥雅纳!

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

调用时使用的参数(或参数,无论你喜欢)包含括号中的方法,初步括号必须紧跟在方法名。所以,奥雅纳指出,

this.is(:okay) 

this.is (:not_okay) 

你是不是必需的,但是,要使用括号。所以,

this.is :also_okay 
+0

jvillian感谢您的阐述。 Ruby有很多表达自己的方式,菜鸟很容易忽视基本原理,认为“嘿是另一种表达方式,我不知道?”。 我爱Ruby on Rails,但当然! –

+0

当然。我一直在RoR工作了很长一段时间,并且仍然每天都会学到新的东西。请记住在你认为合适的时候标记答案和upvote。 – jvillian

相关问题