-1

J'ai un problème de compréhension de la façon dont les attributs sont "envoyés" aux modèles imbriqués, et si cela est possible pour le modèle avec attrubute virtuel aussi. J'ai trois modèles:Rails imbriqués et initialisation des attributs virtuels

class User < ActiveRecord::Base 
    ... 
    has_and_belongs_to_many :clearancegoods 
    has_many :clearanceitems, through: :user_clearanceitems_descriptions 
    has_many :user_clearanceitems_descriptions 
    ... 
end 

class Clearanceitem < ActiveRecord::Base 
    ... 
    has_many :users, through: :user_clearanceitems_descriptions 
    has_many :user_clearanceitems_descriptions 
    accepts_nested_attributes_for :user_clearanceitems_descriptions 
    ... 
    def user_id 
     @user_id 
    end 
    def user_id=(val) 
     @user_id = val 
    end 
end 

class UserClearanceitemsDescription < ActiveRecord::Base 
    belongs_to :user 
    belongs_to :clearanceitem 
end 

dans la console:

desc = User.find(5).user_clearanceitems_descriptions.new 
desc.user_id 
### result is 5 

item = User.find(5).clearanceitems.new 
item.user_id 
### result in nil 
+0

Vous devez préciser ce que vous essayez d'accomplir avec l'attribut user_id ajouté. – depquid

Répondre

0

Si Clearanceitem peut avoir de nombreux utilisateurs, il ne peut pas avoir un seul user_id, sinon cet attribut devrait avoir plusieurs valeurs. Si vous êtes juste essayer de créer Clearanceitems associé à l'utilisateur, ActiveRecord automagiquement créer l'associé rejoindre enregistrement:

User.find(5).clearanceitems.create 
User.find(5).clearanceitems # Contains the Clearanceitem you just created 

Donc supprimez l'attribut user_id de Clearanceitem.