Premier argument en forme ne peut pas contenir zéro ou vide - Rails 4
Je reçois cette erreur avec mon formulaire de contact dans les rails:
First argument in form cannot contain nil or be empty
Vue:
<%= form_for @contact do |f| %>
and so on.......
Contrôleur
def new
@contact = Contact.new
end
and so on....
J'ai trouvé les erreurs liées, mais aucune solution semble correspondre à mon problème. Des indices de ce qui pourrait être la cause?
- Pouvez-vous vérifier que
@contact
n'est pasnil
? Je devine que votre formulaire est rendu à partir d'une action autre quecontacts#new
. - FWIW, la frustration, vous vous êtes sentiment est partagé par tous ceux qui ont appris à code – c'est juste une partie naturelle de l'apprentissage d'une étrangère cadre. Je suis ne pense pas que cela ajoute quelque chose à votre question à se plaindre à ce sujet.
- Vous pouvez poster la trace de la pile?
Vous devez vous connecter pour publier un commentaire.
Est le message d'erreur vous disant que vous ne pouvez pas avoir les éléments suivants:
Mon hypothèse ici est que votre
@contact
est fixé ànil
et qu'elle ne vient pas de votreContact#new
action.Pour info, il serait tout simplement de fonctionner si vous faites cela:
Si c'est pas recommandé.
Vous devez vérifier que la vue contenant votre formulaire est effectivement rendu par la
new
action de votreContactsController
.form_for
méthode a besoin d'une instance d'un modèle afin de bien construire les params de hachage une fois que le formulaire est soumis. Découvrez docs. Vous pouvez utiliserContact.new
dans la vue, mais cela rompt avec le modèle MVC, de sorte que vous pourriez aussi bien sauter le contrôleur complètement et d'inclure plus de logique dans les points de vue.J'ai eu un problème similaire où j'avais un formulaire dans un modal qui a apporté des modifications à un modèle différent de ce que le fond de page a été à l'affiche. Même si j'ai eu l'requis @contact = Contact.de nouveau dans mon contrôleur de Contact, j'ai besoin d'ajouter ce code dans le contrôleur pour la page d'arrière-plan.
Par exemple, j'ai un Répertoire de modèle et à l'intérieur de mon index, vue de Répertoire, j'ai un modal avec un formulaire qui permet d'ajouter un contact à mon Contact modèle. J'ai besoin d' @contact = Contact.de nouveau dans ma méthode de l'index dans mon Répertoire de contrôleur:
Et ensuite le formulaire à l'intérieur de mon modal qui est montré sur l'Annuaire index.html a la même syntaxe que d'autres ont écrit:
<%= form_for @contact url: {controller: 'contact', action: 'create'} do |f| %>
Je sais que cela a accepté de répondre, mais cela n'a pas résolu mon problème(je n'ai pas voulu utiliser de nouvelles de mon point de vue) et j'ai l'intention de poster ce qui a résolu le mien.
C'est toujours une faute de frappe, vous pouvez vérifier vos itinéraires avec
$rake routes
si les routes sont ok, que son certains genre de type à un autre endroit.Dans mon cas, j'ai été en utilisant sublime de l'éditeur, et j'ai eu un supplément de def au-dessus de la def de nouveau dans mon contrôleur, je ne sais pas comment il est arrivé là, mais c'était il y a...la Suppression il a résolu mon problème après environ demi-heure de l'ongle bitting... Il peut être n'importe quel type de faute à l'origine de ce problème. Cette erreur signifie simplement que la nouvelle méthode n'est pas accessible, si elle a été communiquée, il aurait initialisé la variable.
Je le répète, est toujours une faute de frappe quelque part.
Espère que cela aide quelqu'un.
En fait, si votre variable d'instance est censé être
nil
, vous pouvez utiliser:contact
au lieu de@contact
et de fournir un chemin d'accès.Dans votre cas, le code doit être,
La
login_path
est juste un exemple et peut être remplacé, s'il le juge convenable.Il peut dépendre de l'endroit où votre nouveau ou d'en créer d'action est défini. J'ai eu le même problème, je devais mettre le @Object = objet.nouvelle commande à l'intérieur de la page de méthode.
Par exemple..
fin
Je avant a défini une "nouvelle" et de "créer" la méthode et a l'action qui est d'habitude et je le fais dans d'autres instances. Ne sais toujours pas pourquoi.
J'ai eu le même problème, mais c'était facile à réparer. Dans votre
#example posts_controler.rb
ajouter la même ligne pour trouver des post comme dans l'edit. Dans mon application, c'estIl ne fonctionne pas ici becase je l'ai ajouté mais n'a pas enregistrer mes modifications ;).