【问题标题】:Rails - syntax error in controller for using 2 join tablesRails - 控制器中使用 2 个连接表的语法错误
【发布时间】:2011-06-25 13:40:04
【问题描述】:

我正在尝试处理员工控制器中的多个连接表。

我有 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”是什么,谷歌无法回答我这个问题。但更重要的是:如何编写这段代码,这样就不会再出现语法错误了?

【问题讨论】:

    标签: ruby-on-rails syntax-error jointable


    【解决方案1】:

    tASSOC 是=> 令牌。

    你有这样的代码,这是无效的:

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

    您必须为哈希中的每个值指定一个键。你只指定了一个键:position,它有一个哈希作为它的对应值。以下内容无效,因为它没有键(或者更确切地说,Ruby 解释器将 Hash 中的第二个值视为没有值的键......因此它期望 => 跟随它)。

    编辑 |请注意:

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

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

    【讨论】:

    • 感谢您的回答。我不喜欢这种语法,而且我是一个非常该死的初学者,所以我不能太关注你,抱歉!是 :a, :b, :c ...所有不同的表吗?我不能把它转移到我的案子上,对不起。像这样的东西? { :current_qualifications => :skill, {:expected_qualifications => :skill} => :position}部分{:position => { :expected_qualifications => :skill}}已经可以完美运行了,只是当我想添加其余部分时,我遇到了麻烦。
    • 我避免评论表等,因为问题在于您对语言本身的理解;)哈希的语法是:{key => value, key => value, key => value} 等。键和值可以是任何东西(字符串, Symbol, Array, Hash...),但它们必须始终配对在一起。当您在散列中嵌套一组大括号时,您正在创建另一个散列,因此{:a => {:b => :c}} 生成一个二维散列,其中hash[:a][:b] == :c。但是{:a => {:b => :c}, {:d => :e}} 会导致解析错误,因为{:d => :e} 部分是没有配对键的单个值(哈希)。
    • 是的,我不是以英语为母语的人,我想我会说出可怕的句子:P 对不起!谢谢,我想我明白你的意思了。因此,如果我删除围绕 :d => :e 的花括号,则语法必须正确。我为我的案例实现了它,现在只有一个名称错误undefined local variable or method current_qualifications' for #<0x37cb3d8>
    • &gt;&gt;&gt;&gt;
    猜你喜欢
    • 1970-01-01
    • 2013-11-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多