考虑到以下关联,我需要引用Choice模型中连接到的Question.我一直在try 使用belongs_to :question, through: :answer来执行此操作.

class User
  has_many :questions
  has_many :choices
end

class Question
  belongs_to :user
  has_many :answers
  has_one :choice, :through => :answer
end

class Answer
  belongs_to :question
end

class Choice
  belongs_to :user
  belongs_to :answer
  belongs_to :question, :through => :answer

  validates_uniqueness_of :answer_id, :scope => [ :question_id, :user_id ]
end

我越来越

NameError未初始化常量User::Choice

当我试着做current_user.choices

如果我不包括

belongs_to :question, :through => :answer

但我想用它,因为我想做validates_uniqueness_of

我可能忽略了一些简单的事情.任何帮助都将不胜感激.

推荐答案

belongs_to关联不能有:through选项.最好将question_id缓存在Choice上,并向表中添加一个唯一的索引(尤其是因为validates_uniqueness_of容易出现竞争条件).

如果你有妄想症,可以在Choice中添加一个自定义验证,确认答案的question_id个匹配项,但听起来不应该让最终用户有机会提交会造成这种不匹配的数据.

Ruby-on-rails相关问答推荐

错误正在被ViewComponent、Ruby on Rails中吞噬

为Rails服务器推荐的交付类型

在Ruby on Rails中获取堆栈级别太深错误(&Q)

Ruby on Rails 更新触发了 Mailer 函数中的 ArgumentError

复制我的活动时,活动描述没有复制过来

ViewModel 和 Controller 有什么区别?

Rails:用于创建固定长度 char(12) 列的迁移

如何在 YAML 中声明带有单引号和双引号的字符串?

Rails 模型方法 self.与普通

Rails cron 与时俱进,设置环境

使用 Ruby on Rails 从原始 IP 地址获取用户国家名称

如何在我的 Gemfile 中找到未使用的Ruby

如何获取包含表的列名的数组

如何在特定时区(最好是我的应用程序的默认时区,而不是 UTC)中创建新的 DateTime 对象?

如何在 Rails 中测试助手?

我收到在扫描下一个令牌时发现无法启动任何令牌的字符

form_for 未定义的方法 `user_path'

如何在同一个 Rails 控制器操作中处理多个 HTTP 方法

如何从 rails 控制器操作发出 404 响应?

用于在多行上链接调用的 Ruby 约定