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.
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
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
. "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