2009-11-18 4 views
1

나는 누군가가 이것을 빨리 볼 수 있는지 궁금해했다. 나는 측정 단위를 변환하는 간단한 변환 응용 프로그램을 만들고 있습니다. 각 테이블 사이의 관계와 함께 각각의 관계를 저장하는 조인 테이블을 사용하여 테이블을 자체 참조 할 수 있어야합니다. 이것은 관계의 어느 한 쪽에서 참조 될 것입니다. 예를 들어, 1cm = 10mm 및 10mm = 1cm. 이 작품을 좋아 대부분의 경우ROR 자체 참조 has_many through with accept_nested_attributes_for

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

도움을 주시면 대단히 감사하겠습니다. :)

+0

오류가 있습니까? 그렇다면 질문에 추가 할 수 있습니까? – marcgg

+0

답장을 보내 주셔서 감사합니다. 끝에 오류 메시지가 추가되었습니다. – mark

답변

0

언뜻보기에 문제는 많은 정의를 통해 나온 것입니다. 외부 키인 Rails를 정의하지 않으면 join 테이블에서 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 
+0

대단히 감사합니다! 조인 테이블이 문제가되는 것은 옳다. 내가 여기에 게시하지 않음으로써 볼 수 있듯이 나는 충분한주의를 기울이지 않았으며 실제로 참여가 잘못 정의되었습니다. 사실 내 이름을 바꾸는 방법에 관해서는 'related_measure'대신 'owner_measure'로 변경하는 것이 었습니다. 다시 한번 감사드립니다. – mark

관련 문제