【问题标题】:Have strange confused in ActiveRecord associations has_one?在 ActiveRecord 关联 has_one 中有奇怪的困惑吗?
【发布时间】:2014-01-22 06:24:31
【问题描述】:

有两个模型A,B这样:

   class A < ActiveRecord::Base
      has_one :b,:foreign_key => :sid
   end

   class B < ActiveRecord::Base
      belongs_to :a,:foreign_key => :sid
   end

A 有字段 id which auto_increment,归档 sid which uniq

B 已提交 sid 我设置为 primary_key

现在我想通过a 实例获取b 实例。我的代码是这样的:

A.frist.b

我有错误

SELECT `b_model_name`.* FROM `b_model_name` WHERE `b_model_name`.`sid` = 1 LIMIT 1

注意在数据库模型Bsid先关联模型A的记录

我想知道为什么查询会喜欢

 SELECT `b_model_name`.* FROM `b_model_name` WHERE `b_model_name`.`sid` = 1 LIMIT 1

为什么不:

 SELECT `b_model_name`.* FROM `b_model_name` WHERE `b_model_name`.`sid` = a.sid LIMIT 1

【问题讨论】:

    标签: ruby-on-rails ruby activerecord


    【解决方案1】:

    我觉得你的代码没问题

    您被否决的原因之一是我认为您通过为标准 has_one / belongs_to 关系定义自定义 foreign_key 来违反惯例

    而且,我看不出你真正想要达到的目标!如果模型完全不同,则必须定义自定义关系,但看起来它们是标准的 has_one / belongs_to 关系

    也许你可以试试这个:

       class A < ActiveRecord::Base
          has_one :b, class_name: "B"
       end
    
       class B < ActiveRecord::Base
          belongs_to :a, class_name: "A"
       end
    
       as
       id | a1 | a2 | a3 | a4 | created_at | updated_at
    
       bs
       id | a_id | b1 | b2 | b3 | created_at | updated_at
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-11-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-08-28
      相关资源
      最近更新 更多