ROR ذاتي المرجع HAS_MANY من خلال مع قبول_nted_attributes_for

StackOverflow https://stackoverflow.com/questions/1755500

  •  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 %>

بالنسبة للجزء الأكبر هذا يعمل بشكل جيد. إلا أنني لا أستطيع الوصول إلى اسم التدبير ذي الصلة ، فقط المالك.

أحتاج إلى الحصول عليها بطريقة أو بأخرى:

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