我收到了一个错误:
undefined method `user_path' for #<#<Class:0x007fd1f223ead0>:0x007fd1f2241af0>
当我正在尝试编辑学生时。我真的不理解“user_path”方法警报,因为我从未在视图中写过这个。 (学生不是模特)我没有使用rails g scaffold来生成它。
谢谢
在我的StudentsController中:
def edit
@student = User.find(params[:id])
end
在视图(edit.html.erb)中:
<%= form_for(@student) do |f| %> ...
在routes.rb中:
resources :students
答案 0 :(得分:91)
您的students_controller
与resources :students
中的routes.rb
行相对应。这会创建使用单词students
的路线,例如students_path
和new_student_path
。使用form_for(@record)
时,URL是根据对象类确定的。在这种情况下,@record
是User
,因此当对象是新记录时路径为users_path
,而对象保留时为user_path(@record)
。由于您没有定义users_controller
,因此您需要手动设置form_for
的网址以修复此错误
form_for @user, url: student_path(@user), html: { method: :put } do |f|
现在,如果您正在使用名为_form.html.erb
的部分并在新操作和编辑操作上使用此部分,那么您将遇到问题,因为新操作和编辑操作的网址都不同。你必须将你的观点改为这样的
# 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
答案 1 :(得分:0)
我用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
答案 2 :(得分:0)
如果由于名称空间而在这里(就像10分钟前一样),您将需要此:
对于命名空间路由,例如admin_post_url:
<%= form_for([:admin, @post]) do |f| %> ... <% end %>
来自doc