2010-09-10 4 views
1

J'essaye d'écrire en db un id d'une autre table J'ai une table de machine qui appartient à la table de propriétaire.La liste combinée ne peut pas écrire en db

Modèles:

class Machine < ActiveRecord::Base 
    has_many :ipvfours, :dependent => :destroy 
    belongs_to :owners 
    accepts_nested_attributes_for :ipvfours 
    #accepts_nested_attributes_for :owners 

    # some check on fields 
    validates_uniqueness_of :nom, :scope => :nom 
    validates_length_of :nom, :within => 3..24 
    #validates_length_of :role, :within => 3..15 


    # return the value 
    def to_s 
    "#{nom},#{role}" 
    end 

class Owner < ActiveRecord::Base 
    has_many :machines 
    #accepts_nested_attributes_for :machines 
    def name_owner 
    "#{name}" 
    end 
end 

dans mes informations _form de la table sont affichés correctement mais j'ai une erreur lors de créer:

_form

<p> 
    <%= f_owner.label :owner %><br /> 
    <%= f_owner.collection_select :owner_id, Owner.find(:all), :id, :name, :prompt =>  "Select an owner"%> 
</p> 

Mes créer controleur:

def create 
    @machine = Machine.new(params[:machine]) 
    respond_to do |format| 
    if @machine.save 
     flash[:notice] = 'Machine was successfully created.' 
     format.html { redirect_to(@machine) } 
     format.xml { render :xml => @machine, :status => :created, :location => @machine } 
    else 
     format.html { render :action => "new" } 
     format.xml { render :xml => @machine.errors, :status => :unprocessable_entity } 
    end 
    end 

fin

erreur que j'ai:

NameError in MachinesController#create 

uninitialized constant Machine::Owners 

et demande est:

{"machine"=>{"nom"=>"fgj", 
"owners"=>{"owner_id"=>"1"}, 
"role"=>"fgj", 
"ipvfours_attributes"=>{"0"=>{"ip"=>"fgj"}}}, 
"commit"=>"Create", 
"authenticity_token"=>"/j6/yo0KedbArk5Rj0SKGwIvg39+IMzmO78l/Fa7lHY="} 

alors que je pense qu'il devrait être quelque chose comme:

{"machine"=>{"nom"=>"fgj", 
"owner_id"=>{"owners"=>"1"}, 
"role"=>"fgj", 
"ipvfours_attributes"=>{"0"=>{"ip"=>"fgj"}}}, 
"commit"=>"Create", 
"authenticity_token"=>"/j6/yo0KedbArk5Rj0SKGwIvg39+IMzmO78l/Fa7lHY="} 

mais je après est beaucoup d'essayer, je ne sais pas. Merci d'avance.

Répondre

0

Votre association belongs_to fait référence à owners au pluriel alors qu'elle devrait être owner au singulier. Une machine ne peut appartenir qu'à un seul propriétaire.

belongs_to :owner 
+0

ok merci. Mais j'ai toujours une erreur après: ActiveRecord :: AssociationTypeMismatch dans MachinesController # créer Propriétaire (# 59109312) prévu, a obtenu HashWithIndifferentAccess (# 40352280) et la demande semble maintenant mieux. Donc, je pense que le problème est amlost corrigé :) – Goueg83460

+0

Le paramètre owner_id dans votre requête devrait être "owner_id" => "1". Si c'est ce que vous montrez dans votre réponse {"owners =>" 1 "}, cela est probablement à l'origine de l'erreur: lorsque des paramètres de type hachage sont passés dans des rails, ils sont convertis en une instance HashWithIndifferentAccess – Shadwell

+0

. "machine" => {"nom" => "fgj", "owners" => {"owner_id" => "1"}, "rôle" => "fgj", "ipvfours_attributes" => {" 0 "=> {" ip "=>" fgj "}}}, "commit"=>" Créer », "authenticity_token"=> "/ J6/yo0KedbArk5Rj0SKGwIvg39 + IMzmO78l/Fa7lHY ="} n » Donc, même si j'ai une telle demande, j'ai toujours le même problème Désolé si je ne comprends pas correctement, je suis un débutant avec ruby ​​sur rails – Goueg83460

Questions connexes