2015-10-14 9 views
8

Ich habe akzeptiert verschachtelt einen Beitrag macheRails 4 API für benannte Modellattribut so etwas wie diese

params.permit(:name, :order_lines_attributes => [ 
         :quantity, :price, :notes, :priority, :product_id, :option_id 
      ]) 

Ich bin dann Rufen Sie die entsprechende Route auf, die einen Auftrag erstellt und alle verschachtelten order_lines. Diese Methode erstellt eine Reihenfolge erfolgreich, aber einige Schienen magic versucht, die verschachtelten order_lines auch zu erstellen. Ich erhalte diesen Fehler:

Uninitialized Constant OrderLine.

Ich brauche meine accepts_nested_attributes_for Anruf zu erkennen, dass Namespaced zu Api::V1::OrderLine ist. Stattdessen sucht Schienen hinter den Kulissen nur ohne den Namensraum. Wie kann ich dieses Problem beheben?

+0

vielleicht versuchen Hinzufügen von 'class_name:" Api :: V1 :: OrderLine "' zu 'has_many: order_lines'? – basiam

Antwort

1

Ich bin mir ziemlich sicher, dass die Lösung hier nur ist, um Rails den vollständigen verschachtelten/namespaced Klassennamen wissen zu lassen.

Von docs:

: class_name

Specify the class name of the association. Use it only if that name can't be inferred from the association name. So belongs_to :author will by default be linked to the Author class, but if the real class name is Person, you'll have to specify it with this option.

ich in der Regel zu sehen, dass class_name Option nimmt die Zeichenfolge (Klassennamen) als Argument, aber ich ziehe es konstant zu verwenden, nicht string:

module Api 
    module V1 
    class Order < ActiveRecord::Base 
     has_many :order_lines, 
     class_name: Api::V1::OrderLine 
    end 
    end 
end 

module Api 
    module V1 
    class OrderLine < ActiveRecord::Base 
     belongs_to :order, 
     class_name: Api::V1::Order 
    end 
    end 
end