一直在搞乱Rails,在经过Hartl的教程时,我被要求做一个项目。认为这是一个偏离路径的好机会,即使我不够了解;)因此,为什么我有一些问题。
我有两种模式:
Foo
,其参数名称为has_many FooStatus
FooStatus
,其参数为Foo.name和content,belongs_to Foo
Hartl的教程使用您登录的帐户,因此@foo
参数已经绑定,foo.id
可供随时使用。经过身份验证后,用户可以为任何Foo
创建状态。在我的HTTP请求中,我尝试通过foo.name
和foostatus.content
发送并将该信息保存到我的数据库中。
我的问题: 这些模型是否会在db?
中的两个对象之间存储适当的关系/链接第<% 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])
但是阅读强参数会让我陷入困境,因为这是不允许的。
答案 0 :(得分:5)
您可以指定将哪些列用作关联的外键和主键:
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