문제

누군가가 이것을 간단히 볼 수 있는지 궁금했습니다. 측정 단위 사이를 변환하는 간단한 변환 응용 프로그램을 만들고 있습니다. 나는 각각의 관계와 각각의 전환을 저장하는 조인 테이블을 사용하여 테이블을 자체 참조 할 수 있어야합니다. 이것은 관계의 양쪽 사이에서 참조 될 것입니다. 예를 들어 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
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top