web-dev-qa-db-fra.com

formulaire_pour la méthode non définie `chemin_utilisateur '

Je reçois une erreur:

undefined method `user_path' for #<#<Class:0x007fd1f223ead0>:0x007fd1f2241af0>

quand j'essaie d'éditer un élève. Je ne comprends pas vraiment l'alerte de la méthode "user_path" puisque je ne l'écris jamais dans la vue. (Student n'est pas un modèle) et je n'ai pas utilisé Rails g scaffold pour le générer.

Merci 

Dans mon StudentsController:

def edit
  @student = User.find(params[:id])
end

Dans la vue (edit.html.erb):

<%= form_for(@student) do |f| %> ...

Dans routes.rb:

resources :students
35
Max

vous avez un students_controller qui correspond à la ligne resources :students dans votre routes.rb. Cela crée des itinéraires qui utilisent Word students comme students_path et new_student_path. Lors de l'utilisation de form_for(@record), l'URL est déterminé à partir de la classe d'objets. Dans ce cas, @record est une User et le chemin est donc users_path lorsque l'objet est un nouvel enregistrement et user_path(@record) lorsque l'objet est conservé. puisque vous n'avez pas défini de users_controller, vous devez définir manuellement l'URL du form_for pour corriger cette erreur

form_for @user, url: student_path(@user), html: { method: :put } do |f|

À présent, si vous utilisez un partiel appelé _form.html.erb et que vous l'utilisez à la fois pour les actions nouvelles et d'édition, vous allez avoir un problème, car les URL des actions nouvelles et d'édition sont différentes. vous devez changer votre point de vue pour quelque chose comme ça

# new.html.erb
form_for @user, url: students_path, html: { method: :post } do |f|
  render 'form', f: f

# edit.html.erb
form_for @user, url: student_path(@user), html: { method: :put } do |f|
  render 'form', f: f

# _form.html.erb
f.text_field :name
f.text_field :title
91
jvnill

je le répare avec des variables locales dans le rendu. Dans Rails 5 - form_with tag:

# new.html.erb
  render partial: 'form', locals: {user: @user, url: students_path}

# edit.html.erb
  render partial: 'form', locals: {user: @user, url: student_path(@user)}

# _form.html.erb
form_with  model: user, url: url, local: true do |f|
  f.text_field :name
  f.text_field :title
end
0
E. Musinov