Je voulais créer un réseau social très simple. J'ai commencé avec deux modèles: Utilisateur (en utilisant Devise gem) et son profil. Ils sont reliés par la relation 1-à-1, donc mes itinéraires ressembler à:Impossible d'ajouter des validations dans un modèle de ressource unique dans Rails 3
resources :users do
resource :profile
end
je un contrôleur approprié - voici le code pour créer le profil (l'édition est à peu près le même):
def new
@profile = current_user.create_profile
end
def create
@profile = current_user.profile.create(params[:profile])
if @profile.save
redirect_to user_profile_path(current_user)
else
render :action => "new"
end
end
J'ai utilisé la variable current_user, car l'utilisateur n'est pas autorisé à créer un profil pour quelqu'un d'autre, peu importe ce qu'il tape dans la barre d'adresse.
Dans la « nouvelle » vue que j'ai une forme:
- form_for [@profile.user, @profile] do |p|
(fields omitted)
Il travaille comme je m'y attendais - les utilisateurs peuvent ajouter leurs données aux profils et après avoir frappé « Enregistrer » sont redirigés vers leur nouveau page. Cependant, lorsque je tente d'ajouter quelques validations au modèle de profil (même les plus simples, comme validates_presence_of), puis créer un nouveau profil, mon contrôleur me montre une erreur:
undefined method `user_profiles_path' for #<#<Class:0xb2d3e5c>:0xb2d2728>
Extracted source (around line #1):
1: - form_for [@profile.user, @profile] do |p|
Il est étrange, mais ce problème ne se produire lors de la mise à jour des informations de profil, seulement en essayant de créer un nouveau. J'ai googlé une solution me disant de spécifier l'URL de redirection dans form_for helper. Donc, je l'ai changé à mon avis:
- form_for [@profile.user, @profile], :url => user_profile_path(@profile.user) do |p|
Cela ne fonctionne toujours pas. Il affiche la vue que je voulais (avec un message d'erreur de validation dès le début, mais je pourrais vivre avec ça ;-)), mais après avoir frappé « Enregistrer » il produit un autre problème:
undefined method `create' for nil:NilClass
Je trouve même plus étrange, car il affiche l'objet du paramètre dans les détails de l'erreur, il contient les bonnes données et est tout sauf nul. J'ai manqué d'idées, ce qui peut être faux.
Je suis un peu curieux. Qu'est-ce qui cause mon problème et comment le réparer?
Merci d'avance!
Essayez de ne pas poser une question à la fois s'il vous plaît –