La table recette a un champ “user_id INT(11) NOT NULL” qui est une clef
Que dois-je faire, merci par avance pour votre précieuse aide.
Cordialement,
Ton problème est un problème SQL. En effet il y a deux moyens pour
créer un objet ActiveRecord en BDD :
Object.create
Object.new
Dans le premier cas ActiveRecord fait un enregistrement direct en BDD.
Dans le deuxième cas il n’y aura un enregistrement que si tu le dis
explicitement avec un save.
Je suppose que ton erreur arrive quand tu fais un create. En effet, au
vu de la configuration de ta BDD? tu es toujours obligé de lier un
utilisateur avec une recette au moment de l’enregistrement en BDD
(save ou create). Si tu ne l’as pas fait alors RAILS tente de mettre à
NULL le champs mais la BDD n’en veux pas car tu as mis à NOT NULL.
Tu as donc deux choix :
mettre ton champs user_id possible à NULL
faire une méthode before_create qui vérifie qu’un utilisateur est
défini sinon le met à 0, mais alors il faut gérer encore plein d’autre
cas après.
La table recette a un champ “user_id INT(11) NOT NULL” qui est une clef
Que dois-je faire, merci par avance pour votre pr�cieuse aide.
Cordialement,
Ton probl�me est un probl�me SQL. En effet il y a deux moyens pour
cr�er un objet ActiveRecord en BDD :
Object.create
Object.new
Dans le premier cas ActiveRecord fait un enregistrement direct en BDD.
Dans le deuxi�me cas il n’y aura un enregistrement que si tu le dis
explicitement avec un save.
Je suppose que ton erreur arrive quand tu fais un create. En effet, au
vu de la configuration de ta BDD? tu es toujours oblig� de lier un
utilisateur avec une recette au moment de l’enregistrement en BDD
(save ou create). Si tu ne l’as pas fait alors RAILS tente de mettre �
NULL le champs mais la BDD n’en veux pas car tu as mis � NOT NULL.
Tu as donc deux choix :
mettre ton champs user_id possible � NULL
faire une m�thode before_create qui v�rifie qu’un utilisateur est
d�fini sinon le met � 0, mais alors il faut g�rer encore plein d’autre
cas apr�s.
CREATE TABLE recettes ( Titre varchar(100) NOT NULL, Ingredients text NOT NULL, id int(11) NOT NULL auto_increment, Description text NOT NULL, Date datetime NOT NULL, image_url varchar(200) NOT NULL, Alias varchar(50) NOT NULL, user_id int(11) default NULL,
PRIMARY KEY (id),
KEY fk_recettes_users (user_id)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=4 ;
Effectivement quand le user_id est NULL ruby accepte le create par
contre il n’y a aucune donn�e stock� dans le champs user_id donc aucun
lien avec la table user ou tout simplement rien ne specifie que la
recette appartient au user qui l’a cr��…
J’utilise le plug in :“before_filter :login_required”…
Que faire?
Comment cr�e tu par exemple ta recette dans ta BDD ?
rempli tu l’attribut user ou user_id ?
Ca plante avant ou apr�s avoir assign� ces valeurs ?
Effectivement quand le user_id est NULL ruby accepte le create par
contre il n’y a aucune donnée stocké dans le champs user_id donc aucun
lien avec la table user ou tout simplement rien ne specifie que la
recette appartient au user qui l’a créé…
J’utilise le plug in :“before_filter :login_required”…
Que faire?
Comment crée tu par exemple ta recette dans ta BDD ?
rempli tu l’attribut user ou user_id ?
Ca plante avant ou après avoir assigné ces valeurs ?
Alias varchar(50) NOT NULL, password varchar(40) default NULL,
def create
et ca plante dés que je “create” ma recette.
Ok, donc ton problème doit surement venir de ta vue de new. En effet,
on peux supposer que tu ne récupères pas de paramètres :
params[:recette][:user_id].
Si dans ta page new il n’y a pas de champs select pour définir ton
user alors ton problème vient tout simplement de là. Tu ne donnes
jamais d’utilisateur à ton objet recette. un petit :
J’ai pas détaillé mais current_user fait référence à un user qui sait
identifié sur le site. (en général avec acts_as_authenticated ou
restful_authentication, tu as un “current_user”)
donc tu remplaces current_user par qqch qui pointe sur ton user courant.
Suis-je clair?
Juste encore une petite chose, je veux maintenant afficher dans une
page “listmembre” seulement les recettes de mon user connecté ( j’ai
activé la fonction “remember me”.