Max*_*Max 36 ruby-on-rails ruby-on-rails-3
我收到一个错误:
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
jvn*_*ill 92
你有一个students_controller对应resources :students你的线routes.rb.这将创建使用studentslike students_path和word的路由new_student_path.使用时form_for(@record),URL由对象类确定.在这种情况下,@record是User这样的路径是users_path当对象是一个新的记录,user_path(@record)当对象被持久化.由于您没有users_controller定义,您需要手动设置form_for修复此错误的URL
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
小智 5
如果你因为命名空间而来到这里(就像 10 分钟前的我一样),你将需要这个:
对于命名空间路由,例如 admin_post_url:
Run Code Online (Sandbox Code Playgroud)<%= form_for([:admin, @post]) do |f| %> ... <% end %>
来自文档
| 归档时间: | 
 | 
| 查看次数: | 34842 次 | 
| 最近记录: |