2011-10-18 2 views
1

Salut les gars J'ai une relation dans Mongoid et je ne peux pas ajouter current_user à cette relation pour obtenir l'utilisateur qui crée l'affaire. Une relation avec 3 modèle.Ajouter current_user Concevoir pour les relations Mongoid

J'ai trois modèles user.rb, house.rb et deal.rb

user.rb relations (modèle) concevoir

# Relationships 
has_many :houses, dependent: :destroy 
has_many :deals, dependent: :destroy 
key :title 

house.rb

# Relationships 
belongs_to :user 
embeds_many :deals 

deal.rb

# Relationships 
embedded_in :house, :inverse_of => :deals 
belongs_to :user 

Dans mon routes.rb

resources :houses do 
    resources :deals 
end 

Dans mon houses_controller.rb dans ma méthode de création je reçois current_user pour chaque maison de ce côté:

def create 
    #@house = House.new(params[:house]) 
    @house = current_user.houses.new(params[:house]) 
    respond_to do |format| 
     if @house.save 
     format.html { redirect_to @house, notice: 'House was successfully created.' } 
     format.json { render json: @house, status: :created, location: @house } 
     else 
     format.html { render action: "new" } 
     format.json { render json: @house.errors, status: :unprocessable_entity } 
     end 
    end 
    end 

Dans mon deals_controller .rb J'ai la méthode créée ceci:

def create 
     @house = House.find_by_slug(params[:house_id]) 
     @user = User.find(:user_id) 
     @deal = @house.deals.create!(params[:deal]) 
     redirect_to @house, :notice => "Comment created!" 
    end 

Comment puis-je ajouter à cette dernière méthode create, le current_user qui a créé le deal?

Répondre

0

Vous pouvez simplement ajouter ces deux lignes à l'action create:

@deal.user=current_user 
@deal.save 

Et je suggère également de ne pas utiliser de créer! à la place, vous devriez utiliser .new et .save comme dans les échafaudages créer des actions! ;)

+0

Merci! J'ai changer créer pour nouveau et enregistrer: D. Cependant, pour "embeds_many: deals" dans house.rb et "embedded_in: house,: inverse_of =>: deals" dans deal.rb, affichez l'erreur "Référencer un document Deal (n) du document User via une association relationnelle n'est pas autorisé depuis que le Deal est intégré. " Mais avec has_many et belongs_to fonctionne bien. Est-ce mieux travailler avec embeds_many ou has_many et références? Merci – hyperrjas

+0

Si quelqu'un trouve ceci, pour éviter l'erreur que @hyperrjas voit, c.-à-d. "Référencer un document d'accord (n) du document d'utilisateur par l'intermédiaire d'une association relationnelle n'est pas autorisé puisque l'accord est incorporé." Il suffit de retirer cette ligne de l'user.rb qu'il a défini dans sa première question #has_many: deals, dependent:: destroy – brg

Questions connexes