Je n'ai pas utilisé de rails depuis la version 1.2 ou plus et quelques éléments ont changé. J'ai un problème où j'essaie d'enregistrer un modèle vide pour obtenir des erreurs de validation sur les attributs en utilisant: validates_presence_of et à la place j'obtiens l'erreur 'impossible de convertir HashWithIndifferentAccess en String'. Je vais essayer de simplifier mon code pour obtenir le point à travers aussi laconiquement que possible ...Rails erreur avec la validation et plusieurs modèles, ne peut pas convertir HashWithIndifferentAccess en chaîne
mon modèle:
class Project < ActiveRecord::Base
validates_presence_of :title, :description
validates_uniqueness_of :title
has_one :address
accepts_nested_attributes_for :address, :allow_destroy => true
end
modèle enfant:
class Address < ActiveRecord::Base
validates_presence_of :title, :street
belongs_to :project
end
contrôleur
:
class ProjectsController < ApplicationController
def create
@project = Project.new(params[:project])
if @project.save
flash[:notice] = @project.title + ' successfully created'
redirect_to projects_path
else
render :action => 'new'
end
end
end
voir:
<%= error_messages_for 'project' %>
<% form_for @project do |f| %>
<table width="100%" cellpadding="3" cellspacing="0">
<tr>
<td class="adminlabel">
<label for="Title">Title</label>
</td>
<td class="adminbody">
<%= f.text_field :title %>
</td>
</tr>
.....
<% f.fields_for :address do |address| %>
....
Ce code ajoute et des mises à jour très bien aussi longtemps que je remplir tous les champs obligatoires, si je laisse tout en blanc je reçois l'erreur mentionnée ci-dessus, pas la manière la plus gracieuse des utilisateurs alertant il y a un problème;)
Demande params:
{ "commit" => "Enregistrer",
"projet" => { "title" => "",
"notes" => "",
"description" => "",
"address_attributes" => {"city" => "",
"zip" => "",
"title" => "",
"pays" => "",
"suite" => "",
"rue" => "",
"état" => ""}},
"authenticity_token" => » iNPQZrf/oBv22vaI0toTGhknwx0aAU3BSvnIh6qgYQ8 = "}
J'ai cherché pendant des jours et je suis à bout de nerfs, si quelqu'un peut jeter un peu de lumière sur cela pour moi, je l'apprécierais grandement.
Merci d'avance!
Brendan
PS - la trace de la pile comme demandé:
.../app/controllers/projects_controller.rb:27:in `+'
.../app/controllers/projects_controller.rb:27:in `create'
../actionpack-2.3.4/lib/action_controller/base.rb:1331:in `send'
../actionpack-2.3.4/lib/action_controller/base.rb:1331:in `perform_action_without_filters'
../actionpack-2.3.4/lib/action_controller/filters.rb:617:in `call_filters'
../actionpack-2.3.4/lib/action_controller/filters.rb:610:in `perform_action_without_benchmark'
../actionpack-2.3.4/lib/action_controller/benchmarking.rb:68:in `perform_action_without_rescue'
../activesupport-2.3.4/lib/active_support/core_ext/benchmark.rb:17:in `ms'
../activesupport-2.3.4/lib/active_support/core_ext/benchmark.rb:10:in `realtime'
../activesupport-2.3.4/lib/active_support/core_ext/benchmark.rb:17:in `ms'
../actionpack-2.3.4/lib/action_controller/benchmarking.rb:68:in `perform_action_without_rescue'
../actionpack-2.3.4/lib/action_controller/rescue.rb:160:in `perform_action_without_flash'
../actionpack-2.3.4/lib/action_controller/flash.rb:146:in `perform_action'
../actionpack-2.3.4/lib/action_controller/base.rb:532:in `send'
../actionpack-2.3.4/lib/action_controller/base.rb:532:in `process_without_filters'
../actionpack-2.3.4/lib/action_controller/filters.rb:606:in `process'
../actionpack-2.3.4/lib/action_controller/base.rb:391:in `process'
../actionpack-2.3.4/lib/action_controller/base.rb:386:in `call'
../actionpack-2.3.4/lib/action_controller/routing/route_set.rb:437:in `call'
../actionpack-2.3.4/lib/action_controller/dispatcher.rb:87:in `dispatch'
../actionpack-2.3.4/lib/action_controller/dispatcher.rb:121:in `_call'
../actionpack-2.3.4/lib/action_controller/dispatcher.rb:130:in `build_middleware_stack'
../activerecord-2.3.4/lib/active_record/query_cache.rb:29:in `call'
../activerecord-2.3.4/lib/active_record/query_cache.rb:29:in `call'
../activerecord-2.3.4/lib/active_record/connection_adapters/abstract/query_cache.rb:34:in `cache'
..activerecord-2.3.4/lib/active_record/query_cache.rb:9:in `cache'
../activerecord-2.3.4/lib/active_record/query_cache.rb:28:in `call'
../activerecord-2.3.4/lib/active_record/connection_adapters/abstract/connection_pool.rb:361:in `call'
../rack-1.0.1/lib/rack/head.rb:9:in `call'
../rack-1.0.1/lib/rack/methodoverride.rb:24:in `call'
../actionpack-2.3.4/lib/action_controller/params_parser.rb:15:in `call'
../actionpack-2.3.4/lib/action_controller/session/cookie_store.rb:93:in `call'
../actionpack-2.3.4/lib/action_controller/failsafe.rb:26:in `call'
../rack-1.0.1/lib/rack/lock.rb:11:in `call'
../rack-1.0.1/lib/rack/lock.rb:11:in `synchronize'
../rack-1.0.1/lib/rack/lock.rb:11:in `call'
../actionpack-2.3.4/lib/action_controller/dispatcher.rb:114:in `call'
../actionpack-2.3.4/lib/action_controller/reloader.rb:34:in `run'
../actionpack-2.3.4/lib/action_controller/dispatcher.rb:108:in `call'
../rails-2.3.4/lib/rails/rack/static.rb:31:in `call'
../rack-1.0.1/lib/rack/urlmap.rb:46:in `call'
../rack-1.0.1/lib/rack/urlmap.rb:40:in `each'
../rack-1.0.1/lib/rack/urlmap.rb:40:in `call'
../rails-2.3.4/lib/rails/rack/log_tailer.rb:17:in `call'
../rack-1.0.1/lib/rack/content_length.rb:13:in `call'
../rack-1.0.1/lib/rack/chunked.rb:15:in `call'
../rack-1.0.1/lib/rack/handler/mongrel.rb:64:in `process'
..... etc.
Un peu long, désolé;)
Tout semble correct. Pourriez-vous poster la trace de la pile de l'erreur? Cela devrait vous donner une idée de ce qui échoue exactement. – EmFi
Merci d'avoir regardé cela, j'ai regardé dans la trace de la pile comme vous l'avez suggéré mais sans beaucoup de succès. Je l'ai ajouté au corps de ma question pour que tout le monde puisse le voir. –