ruby - Rails has_many 关系不使用 id

标签 ruby ruby-on-rails-4 rails-activerecord

一直在研究 Rails,在学习 Hartl 的教程时,我被要求做一个项目。我认为这是偏离路径的好机会,尽管我还不够了解 ;) 因此我遇到了一些问题。

我有两个模型:

Foo ,其中有参数名称和 has_many FooStatus

FooStatus , 它有参数 Foo.name 和 content, belongs_to Foo

Hartl 的教程使用您登录的帐户,因此 @foo参数已经绑定(bind)并且 foo.id将随时可供使用。通过身份验证后,用户可以为任何 Foo 创建状态.在我的 HTTP 请求中,我试图发送 foo.namefoostatus.content并将该信息保存到我的数据库中。

我的问题: 这些模型是否会在数据库中存储两个对象之间的适当关系/链接?

<% if @foo.foostatus.any? %>给我错误

SQLite3::SQLException: no such column: foostatus.foo_id: SELECT  1 AS one FROM "foostatus"  WHERE "foostatus"."foo_id" = ?  ORDER BY created_at DESC LIMIT 1

所以我假设 .any?方法正在寻找 foostatus.foo_id ,我不存储在我的表中。

我本来以为我可以说

foo = Foo.find_by_name(params[:name]) 
@foostatus = foo.foostatus.build(params[:content])

但是阅读有关强参数的内容让我陷入了困境,因为这是不允许的。

最佳答案

您可以指定将哪些列用作关联的外键和主键:

class Foo < ActiveRecord::Base
  has_many :foo_statuses, foreign_key: :foo_name, primary_key: :name
end

class FooStatus < ActiveReocrd::Base
  belongs_to :foo, foreign_key: :foo_name, primary_key: :name
end

关于ruby - Rails has_many 关系不使用 id,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21466726/

相关文章:

ruby-on-rails - ExecJS::RuntimeUnavailable 在 Rails 中

ruby-on-rails-4 - 升级到 rails 4.2,Model Concerns 现在给出 LoadError: Unable to autoload constant Concerns::blahblah

ruby-on-rails - 条件与变量的关系

ruby-on-rails - 如何从自定义类访问 'request' 对象(或类似对象)?

ruby - 字符串是 "mutable"是什么意思,为什么要关心?

ruby-on-rails - 对象实例的未定义​​方法 `includes'

ruby-on-rails - Active Record 通过关系查询来查找其关系都不具有值的记录

ruby-on-rails - 在 Active Record 中按频率排序结果

ruby - `size` 和 `length` 方法有什么区别

ruby-on-rails - mongoid group_by 返回一个 HashMap 而不是哈希数组