accept_nested_attributes_forと通じROR自己参考にhas_many
-
20-09-2019 - |
質問
誰かがこれを簡単に見て取ることができる場合は、
私は疑問に思いました。私は、測定の単位間の変換を簡単な変換アプリケーションを作ってるんです。私はそれぞれの間の変換に伴って、それぞれの関係を格納する結合テーブルを使用してテーブル自己参照できるようにする必要があります。これは、その後の関係のいずれかの側の間で参照されます。例えば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
所属していません StackOverflow