【问题标题】:Rails: Unexpected tSYMBEG error from "has_many"Rails:来自“has_many”的意外 tSYMBEG 错误
【发布时间】:2022-01-16 03:46:02
【问题描述】:

我用的是Windows10+Ubuntu18.04

我在模型中设置了“has_many”,但启动rails控制台时出现错误消息:

/home/keaton/.rvm/rubies/ruby-2.6.6/bin/ruby: warning: shebang line ending with \r may cause problems
/home/keaton/.rvm/gems/ruby-2.6.6/gems/bootsnap-1.9.3/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:23:in `require': /mnt/c/projects/Kasuri/app/models/user.rb:8: syntax error, unexpected tSYMBEG, expecting do or '{' or '('
  has_many :spaces, through: :space_users
           ^ (SyntaxError)

但我确定我没有拼写错误,rb文件的源代码如下:

class User < ApplicationRecord
  devise :database_authenticatable, :registerable,
         #:recoverable, :rememberable, :validatable

  has_many :space_users, dependent: :destroy
  has_many :spaces, through: :space_users
  has_many :channel_users, dependent: :destroy
    has_many :channels, through: :channel_users
  has_many :messages, dependent: :destroy
end

我正在使用 Devise 来制作登录功能。这是异常的原因吗?谢谢!

【问题讨论】:

    标签: ruby-on-rails devise


    【解决方案1】:

    当下一行被注释掉时,你有一个尾随逗号:

    devise :database_authenticatable, :registerable,
    

    这会导致下一个表达式 has_many :space_users, dependent: :destroy 被视为您将其作为参数传递给 devise 方法。所以解析器实际看到的是:

    devise :database_authenticatable, :registerable, has_many :space_users, dependent: :destroy
    

    括号在嵌套方法调用中不是可选的:

    foo :a, bar :b
    # (irb):34: syntax error, unexpected symbol literal, expecting `do' or '{' or '(' (SyntaxError)   
    
    # works
    foo :a, bar(:b)
    

    【讨论】:

    • 一般不要注释掉未使用的代码——删除它。如果您再次需要它,它会出现在您的 git 历史记录中。
    猜你喜欢
    • 1970-01-01
    • 2014-08-05
    • 1970-01-01
    • 2015-11-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-19
    • 1970-01-01
    相关资源
    最近更新 更多