Rails:来自 "has_many" 的意外 tSYMBEG 错误

Rails: Unexpected tSYMBEG error from "has_many"

我用的是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 制作登录功能。这是例外的原因吗?谢谢!

你有一个尾随逗号,它是在下一行被注释掉时留下的:

devise :database_authenticatable, :registerable,

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

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

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

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

# works
foo :a, bar(:b)