2017-06-12 2 views
0

J'ai la conception base de données suivante:emboîtées dans Activeadmin avec une sélection de menu déroulant - Ruby on Rails

Un pour peut avoir une taille et une taille peut être dans de nombreux commandes.

Par exemple:

Order 1 has a size attribute equal to medium

Order 2 has a size attribute equal to medium

Je veux être en mesure de choisir une taille lorsque je crée un ordre en administration active.

modèle de commande:

class Order < ApplicationRecord 
    has_one :order_size 
    accepts_nested_attributes_for :order_size, :allow_destroy => true 
end 

modèle taille de la commande:

class OrderSize < ApplicationRecord 
    belongs_to :orders 
end 

En outre, une table OrderSize doit avoir une colonne de order_id?

Je ne sais pas si les modèles sont des droits mais activeadmin me donne cette erreur:

undefined method `order_id' for #<Order:0x007fb980e34b80> 

Mes modèles activeadmin

Commander Taille:

ActiveAdmin.register OrderSize do 
    permit_params :name 
end 

Ordre:

ActiveAdmin.register Order do 
    permit_params :due_date, :comments, :approved, :order_size_id, 
       order_size_attributes: [:id, :name,:_destroy] 

    form do |f| 
    f.inputs "Admin Details" do 
     f.input :due_date 
     f.input :order_size 
     f.input :comments 
     f.input :approved 
    end 
    f.actions 
    end 

end 

Répondre

0

I don't know if the models are rights but activeadmin is giving me this error:

undefined method `order_id' for Order:0x007fb980e34b80

Oui, Rails s'attend à une foreign_key(order_id) de modèle associé (de commande) pourObjectRelationalMapping (ORM) pour communiquer avec SGBDR. Créez une migration pour order_id et exécutez rake db:migrate pour résoudre le problème.

De plus, le nom de l'association pour belongs_to ou has_one devrait être singulier.

class OrderSize < ApplicationRecord 
    belongs_to :order 
end 

De plus, vous ne devriez pas avoir order_size_id en orders que l'association est has_one :order_size. Au lieu de cela comme je l'ai indiqué ci-dessus, vous devriez avoir order_id dans order_sizes.

+0

Mais je pourrai avoir la même taille de commande (par exemple moyenne) dans différentes commandes? – exsnake

+0

@exsnake Je crains que vous ne deviez changer vos associations pour satisfaire cela! – Pavan

+0

@pavin Hmmm pouvez-vous m'aider avec ça? Je suppose qu'un Ordre ne peut avoir qu'une taille et qu'une taille peut faire partie de plusieurs ordres. J'utilise 'belongs_to' faux? – exsnake