ROR 자체 참조 HAS_MANY를 통해 accept_nested_attributes_for
-
20-09-2019 - |
문제
누군가가 이것을 간단히 볼 수 있는지 궁금했습니다. 측정 단위 사이를 변환하는 간단한 변환 응용 프로그램을 만들고 있습니다. 나는 각각의 관계와 각각의 전환을 저장하는 조인 테이블을 사용하여 테이블을 자체 참조 할 수 있어야합니다. 이것은 관계의 양쪽 사이에서 참조 될 것입니다. 예를 들어 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>
도움을 주셔서 감사합니다. :)
해결책
언뜻보기에 문제는 정의를 통한 많은 사람들에서 비롯됩니다. 외국 키를 정의하지 않으면 레일은 조인 테이블에서 척도 _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