質問

誰かがこれを簡単に見て取ることができる場合は、

私は疑問に思いました。私は、測定の単位間の変換を簡単な変換アプリケーションを作ってるんです。私はそれぞれの間の変換に伴って、それぞれの関係を格納する結合テーブルを使用してテーブル自己参照できるようにする必要があります。これは、その後の関係のいずれかの側の間で参照されます。例えば1センチメートル= 10ミリメートルと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 %>

ほとんどの部分については、これは[OK]を動作します。私は、関連メジャーの名前にアクセスすることができない場合を除き、所有者のみ。

私はこのように何とかそれを取得する必要があります:

f_r_m.object.related_measure.name

が、明らかに私はそれを設定し、エラーを受け取ることができない私の最善の努力にもかかわらずます。

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

ヘルプは非常に高く評価されるだろう。 :)

役に立ちましたか?

解決

一見問題は、定義によって、多くを持っているから来ています。外部キーを定義することができないことで、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
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top