1

我想知道是否有人可以快速查看一下。我正在制作一个简单的转换应用程序,可以在测量单位之间进行转换。我需要能够使用存储每个之间的关系以及每个之间的转换的连接表来自我引用该表。这将在关系的任何一方之间被引用。例如 1cm = 10mm 和 10mm = 1cm。

到目前为止,我有这个:

#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> 

帮助将不胜感激。:)

4

1 回答 1

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
于 2009-11-18T15:49:02.670 回答