我想知道,如果有人可以快速浏览一下这个。我正在其测量单位之间转换一个简单的转换应用程序。我需要能够自我使用连接表用于存储每个之间的关系,每个之间的转换沿引用表。然后,这将关系两侧之间的引用。例如1厘米= 10mm至10毫米=1厘米。

所以迄今我有这样的:

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

帮助将非常赞赏。 :)

有帮助吗?

解决方案

乍一看问题来自于具有通过定义许多。由于没有定义外键,铁轨,假设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
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top