43

エラーが発生しました:

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

学生を編集しようとしているとき。ビューにこれを記述したことがないため、「user_path」メソッドのアラートを本当に理解していません。(学生はモデルではありません)そして私はそれを生成するためにrailsgscaffoldを使用しませんでした。

ありがとう

私のStudentsControllerで:

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

ビュー(edit.html.erb):

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

routes.rbで:

resources :students
4

3 に答える 3

98

の行にstudents_controller対応するがあります。これにより、 likeおよび。という単語を使用するルートが作成されます。を使用する場合、URLはオブジェクトクラスから決定されます。この場合、は、オブジェクトが新しいレコードであり、オブジェクトが永続化されているときのパスになります。定義されていないため、このエラーを修正するには、のURLを手動で設定する必要がありますresources :studentsroutes.rbstudentsstudents_pathnew_student_pathform_for(@record)@recordUserusers_pathuser_path(@record)users_controllerform_for

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

ここで、部分呼び出し_form.html.erbを使用していて、これを新規アクションと編集アクションの両方で使用する場合、新規アクションと編集アクションの両方のURLが異なるため、問題が発生します。ビューを次のように変更する必要があります

# 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
于 2013-02-07T00:24:51.513 に答える
5

名前空間のためにここにいる場合(10分前の私のように)、これが必要になります:

admin_post_urlのような名前空間ルートの場合:

<%= form_for([:admin, @post]) do |f| %>
 ...
<% end %>

ドキュメントから

于 2019-07-21T23:20:40.177 に答える
1

私はrenderのローカル変数でそれを修正します。Rails 5の場合-form_withタグ:

# 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
于 2019-02-07T13:03:42.910 に答える