2011-06-25 9 views
0

我正试图处理员工控制器中的多个连接表。Rails - 控制器中使用2个连接表的语法错误

我有2个连接表:http://img7.imagebanana.com/img/1cze8z4k/beziehungen.png

  • 员工 - >位置 - >连接表expected_qualifications - >技能
  • 员工 - >连接表current_qualifications - >技能

现在我写的进入员工控制器: @employee = Employee.find(params[:id], :include => [{:position => { :expected_qualifications => :skill}, { :current_qualifications => skill}])

但存在语法错误:

C:/src/script/system/app/controllers/employees_controller.rb:16:语法错误,意想不到的 ']',期望tASSOC

... urrent_qualifications =>技术人员}])

................................................^

首先我不知道“tASSOC”是什么,谷歌无法回答我这个问题。但更重要的是:如何编写这段代码,这样就不会有语法错误了?

回答

0

tASSOC是=>令牌。

你有这样的代码,这是不正确的:

{ :a => :b, { :c => :d } } 

您必须指定在每个哈希值的关键。你只指定了一个密钥:position,它有一个哈希值,因为它是相应的值。下面的东西是无效的,因为它没有一个键(或者说,Ruby解释器看到哈希中的第二个值是没有值的键......因此它期望=>遵循它)。

编辑|请注意:

{ :a => :b, { :c => :d } => :e } 

在语法上是有效的,这就是为什么Ruby假定第二个嵌套Hash实际上是一个关键。

+0

感谢您的回答。我不是这种语法,我是一个非常血腥的初学者,所以我不能跟得上你,为此而感到遗憾! 是:a,:b,:c ......所有不同的表格?我不能真正将它转移到我的案件,对不起。 像这样的东西? '{:current_qualifications =>:skill,{:expected_qualifications =>:skill} =>:position}' '{:position => {:expected_qualifications =>:skill}}'当我想补充剩下的时候,我就陷入困境。 – Kirinriki

+0

我避免评论表等,因为问题是你对语言本身的理解;)哈希的语法是:'{key => value,key => value,key => value}'等等。键和值可以是任何东西(String,Symbol,Array,Hash ...),但它们必须始终配对在一起。当你在一个Hash中嵌套一组curl大括号时,你正在创建*另一个Hash *,所以'{:a => {:b =>:c}}'产生一个二维散列,其中散列[ a] [:b] ==:c'。但是'{:a:> {:b =>:c},{:d =>:e}}'会导致解析错误,因为{:d =>:e}一个哈希),没有配对的密钥。 – d11wtq

+0

是啊,我不是母语为英语的人,我想我会产生可怕的句子:P Sry! 谢谢,我想我明白你的意思。因此,如果我删除环绕的卷曲括号:d =>:e,则语法必须正确。我为我的情况实现了它,现在只有#'的未定义局部变量或方法'current_qualifications'的名称错误...' – Kirinriki