簡體   English   中英

Rails has_one / belongs_to關聯無法按預期工作

[英]Rails has_one/belongs_to associations not working as expected

我正在自學Rails,並且對為什么關聯無法正常工作感到困惑。 我想我缺少了一些基本的知識,但我無法完全了解到底是什么。

我有兩節課-建築和設備。 建築物由2台設備組成,分別命名為position_1和position_2。 這是我的定義:

class Build < ActiveRecord::Base
  has_one :position_1, :class_name => "Equipment"
  has_one :position_2, :class_name => "Equipment"
  attr_accessor :position_1, :position_2
end

class Equipment < ActiveRecord::Base
  belongs_to :build, :foreign_key => :position_1
  belongs_to :build, :foreign_key => :position_2
end

(暫時不考慮可以由關系表來處理,以支持任意數量的位置-我基本上是想弄清楚如何使一個類與另一個類具有兩個has_one關系。)

現在,如果我嘗試做這樣簡單的事情...。

position_1 = Equipment.find(params[:build][:position_1])
position_2 = Equipment.find(params[:build][:position_2])

@build = Build.new

@build.position_1 = position_1
@build.position_2 = position_2

logger.debug("THE BUILD IS #{@build.inspect}")

我將成功創建一個帶有正確分配給position_1參數的設備對象的構建對象,但是build參數的position_1和position_2字段保留為零。

logger.debug("THE EQUIPMENT IS #{@build.position_1}")
> EQUIPMENT IS #<Equipment:0x007fa0581705c0>

logger.debug("THE BUILD IS #{@build.inspect}")
> THE BUILD IS #<Build id: nil, position_1_id: nil, position_2_id: nil, created_at: "2013-05-27 18:00:32", updated_at: "2013-05-27 18:00:32">

我這是怎么了?

首先,我不會在“父” ActiveRecord中將這些關聯包括為“ attr_accessors”。 Rails為您為Build創建正確的關聯字段。

當您創建職位實例(例如“設備”實例)時,將其分配給新內部版本的正確方法是:

position_1 = Equipment.find(params[:build][:position_1])
position_2 = Equipment.find(params[:build][:position_2])

@build = Build.new

@build.position_1 << position_1
@build.position_2 << position_2

這是有關Rails協會的好指南。

弄清楚了-我誤解了Rails如何進行關聯-我真正需要的是...

class Equipment < ActiveRecord::Base
  has_many :builds, :foreign_key => :position_1
  has_many :builds, :foreign_key => :position_2
end

class Build < ActiveRecord::Base
  belongs_to :position_1, :class_name => "Equipment", :foreign_key => "position_1_id"
  belongs_to :position_2, :class_name => "Equipment", :foreign_key => "position_2_id"
end

有了這個適當的位置,一切都會按我的預期進行。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM