form_for undefined method `model_name':: ActiveRecord_Relation:Classe
J'ai eu des problèmes avec form_for rendu. Je veux avoir un _form.html.erb partielle qui traite à la fois la création et l'édition de mon Problème d'enregistrement. Quand je vais en bas de la route de l'aide
<%= form_for(@problem) do |f| %>
J'obtiens l'erreur suivante:
undefined method `model_name' for Problem::ActiveRecord_Relation:Class
Dans mes itinéraires.rb j'ai le texte suivant:
PW::Application.routes.draw do
root to: 'problems#index', via: :get
resources :problems do
member do
post 'up_vote'
post 'down_vote'
end
end
J'ai aussi mon Problème de Contrôleur de
class ProblemsController < ApplicationController
include Concerns::Votes
def new
@problem = Problem.new
end
def index
@problem = Problem.all
end
def show
@problem = find_problem
end
def create
@problem = current_user.problems.new(problem_params)
@problem.save
redirect_to @problem
end
private
def find_problem
@problem = Problem.find(params[:id])
end
def problem_params
params.require(:problem).permit(:name, :description, :url)
end
end
Je peux le faire fonctionner si je spécifiez les éléments suivants :
<%= form_for @problem.new, url: {action: "create"} do |f| %>
Cependant j'ai l'impression que c'est de me répéter, si je puis avoir à faire une partiels séparés juste pour le modifier. J'ai vraiment cant pourquoi cela ne veux pas travailler. Pourrait-il en être je suis le rendu de la forme de l'indice.html.erb?
Toute aide ou une orientation serait très apprécié.
Problem
modèle?Veuillez vérifier que vous êtes hériter de votre Problème de classe avec Active record. il devrait être une sous classe de l'enregistrement actif
pourriez-vous s'il vous plaît montrer votre Problème de classe
Publier vos
controller
.J'ai ajouté ci-dessus.
OriginalL'auteur DMH | 2014-04-28
Vous devez vous connecter pour publier un commentaire.
LOL pourquoi n'ai-je pas voir cela plus tôt?
Yep, c'est totalement le problème. La raison est ici:
Que vous obtenez en retour un
relation
objet (définit un ensemble, plutôt que seul enregistrement). Cela est causé par ce:L'erreur est parce
form_for
s'attend à un seul enregistrement. Vous avez besoin de l'utiliser dans votre contrôleur & ça marche:Vous devriez être en surbrillance le rendu de
_form.html.erb
à partir de la page d'index,pas à la fin de l'histoire.Il a surtout pour but la façon dont vous structuré votre question, il est difficile à apprécier la forme a été appelé à partir d'
index
, ce qui est assez grand facteurbien sûr. J'ai d'abord pensé que le formulaire a été rendue dans le
new
action, qui fait qu'il est source de confusionOù sont mes manoirs @RichPeck merci pour votre aide.
OriginalL'auteur Richard Peck
Vous utilisez peut-être
@problems
, comme vous l'avez dit, la forme est en page d'index. Si vous le faites alors l'action "index" code devrait être commeOriginalL'auteur jbmyid
Vous devriez avoir un
create
méthode définie dans votre contrôleur comme ceEt votre
form_for
pourcreate
action devrait être comme ceciPas sûr de qui downvoted, cependant woudnt-ce que cela signifie, j'aurais deux formes. Un pour de nouvelles et un pour le modifier? J'ai collé mon contrôleur de code ci-dessus.
Oui,vous devez avoir deux
forms
pour chaquecreate
etedit
.Et vous pouvez effectuer le rendu d'une partielle_form.html.erb
dans les deux formes.Essayez cette
@problem = Problem.new(problem_params)
dans la nouvelle et de créer des méthodes.Hey @pavan pas de chance sur le problème = Problème.nouveau(problem_params) il me donne param est manquant ou si la valeur est vide: problème. Je ne suis pas convaincu par l'autre solution pour avoir deux form_for. Je pense que la question est moi l'appel de la _form.html.erb partielle de l'action "index".
OriginalL'auteur Pavan