2009-11-18 33 views
1

我想知道是否有人可以快速瀏覽一下。我正在製作一個簡單的轉換應用程序,可以在測量單位之間轉換我需要能夠使用存儲每個表之間關係的連接表來自引用表,以及每個表之間的轉換。這將在關係的任何一方之間被引用。例如1cm = 10mm和10mm = 1cm。ROR自引用has_many通過accept_nested_attributes_for

所以到目前爲止我有這樣的:

#migrations 
create_table :measures do |t| 
    t.string :name 
end 

create_table :measure_measures do |t| 
    t.integer :measure_id 
    t.integer :related_measure_id 
    t.integer :conversion 
end 

class Measure < ActiveRecord::Base  

    has_many :related_measures, 
     :foreign_key => 'measure_id', 
     :class_name => 'MeasureMeasure', 
     :dependent => :destroy 

    has_many :measures, :through => :related_measures 

    accepts_nested_attributes_for :related_measures, 
     :reject_if => proc { |attrs| attrs['related_measure_id'].blank? || 
            attrs['quantity'].blank? }, 
     :allow_destroy => true  
end 

#controller 
    @measure = Measure.find params[:id 

#form 
    <% form_for @measure do |f| %> 
     <% fields_for :related_measures do |f_r_m| %> 
      <%= f_r_m.text_field :related_measure_id -%> 
      <%= f_r_m.text_field :quantity -%> 
     <% end %> 
    <% end %> 

對於這個工程確定的大部分。除了我不能訪問相關度量的名稱,只有所有者。

我需要得到它在某種程度上是這樣的:

f_r_m.object.related_measure.name 

但很顯然,儘管我盡了最大努力,我不能設置它,並收到錯誤。

undefined method `owner_measure' for #<MeasureMeasure:0x1053139a8> 

幫助將非常感激。 :)

+0

你會得到錯誤嗎?如果是這樣,你可以將它們添加到你的問題嗎? – marcgg 2009-11-18 12:11:46

+0

感謝您的回覆。在最後添加了錯誤消息。 – mark 2009-11-18 13:27:29

回答

0

乍一看問題來自有很多直接的定義。由於未能定義外鍵Rails,它會在連接表中呈現measure_id。這隻會鏈接到您想要查找的衡量標準。

has_many :measures, :through => :related_measures, :foreign_key => :related_measure_id 

我們無法在不看到連接模型內部的情況下診斷此錯誤。

f_r_m.object.related_measure引用連接表。

但我懷疑這是因爲您尚未在連接模型中正確定義關係。應該看起來像這樣:

class MeasureMeasures < ActiveRecord::Base 
    belongs_to :measure 
    belongs_to :related_measure, :classname => "Measure" 
end 
+0

非常感謝!關於連接表是你的絕對正確的問題。正如你所看到的,我沒有在這裏發佈,我沒有給予足夠的關注,而且連接的確定義不正確。實際上,我只是簡單地改變了想法,即如何命名它 - 'owner_measure'而不是'related_measure'。 再次感謝! – mark 2009-11-18 17:53:37