ruby-on-rails - Rails-build_association不适用于has_one和belongs_to关系

标签 ruby-on-rails activerecord associations

我有两个模型

class Subscription < ActiveRecord::Base
  belongs_to :client
end

class Client < ActiveRecord::Base
  has_one :subscription
end

但是当我尝试从 child 创建 parent 时,例如sub.build_client外键没有被设置,例如
>> sub = Subscription.new
=> #<Subscription id: nil, token: nil, user_id: nil, created_at: nil, updated_at: nil, cancelled: nil, active: nil, client_id: nil>
>> sub.save(false);
?> client = sub.build_client
=> #<Client id: nil, server_id: nil, ip: nil, created_at: nil, updated_at: nil>
>> client.save(false)
=> true
>> sub.client_id
=> nil
>> sub
=> #<Subscription id: 4, token: nil, user_id: nil, created_at: "2010-01-11 06:07:45", updated_at: "2010-01-11 06:07:45", cancelled: nil, active: nil, client_id: nil>

如果我执行client.build_subscription,它确实可以工作
?> client = Client.new
=> #<Client id: nil, server_id: nil, ip: nil, created_at: nil, updated_at: nil>
>> client.save(false)
=> true
>> sub = client.build_subscription
=> #<Subscription id: nil, token: nil, user_id: nil, created_at: nil, updated_at: nil, cancelled: nil, active: nil, client_id: 4>
>> sub.save(false)
=> true
>> sub
=> #<Subscription id: 5, token: nil, user_id: nil, created_at: "2010-01-11 06:09:32", updated_at: "2010-01-11 06:09:32", cancelled: nil, active: nil, client_id: 4>
>> client
=> #<Client id: 4, server_id: nil, ip: nil, created_at: "2010-01-11 06:09:02", updated_at: "2010-01-11 06:09:02">
>> ^C

我花了3个小时摆弄,却走不通。
谁能解释我做错了什么,要检查的东西等

最佳答案

根据您的模型关联,SubscriptionClient的子代。

如果首先创建一个订阅,然后按照第一个示例创建一个客户端,Rails无法在client_id表中设置subscriptions外键值,因为此时您还没有创建客户端记录,因此没有任何关联与订阅。因此,您必须先创建父记录(即客户),然后使用build_subscription方法将其与子订阅记录相关联。

关于ruby-on-rails - Rails-build_association不适用于has_one和belongs_to关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2040230/

相关文章:

ruby-on-rails - Heroku 登台应用程序是否与评论应用程序共享数据库?

ruby-on-rails - validates_associated 模型与条件

ruby-on-rails - Rails 3.1 引擎 rake 分贝 :test:prepare task missing

java - 查找关联的程序以使用 Java 打开文件

ruby-on-rails - has_many:通过查询两个值

mysql - 如何使用 MySQL 2 在 Rails 3 项目中使用 WHERE IN?

ruby-on-rails - 弃用警告 : Dangerous query method: Random Record in ActiveRecord >= 5. 2

ruby-on-rails - 动态表对我的用例有意义吗?数据库/模型架构

ruby-on-rails - 强制 $ rake db :reset Despite Other Users with Postgres

ruby-on-rails - SQL查询和ActiveRecord.find_by_sql返回不同的结果怎么可能?