Max*_*Max 36 ruby-on-rails ruby-on-rails-3
我收到一个错误:
undefined method `user_path' for #<#<Class:0x007fd1f223ead0>:0x007fd1f2241af0>
Run Code Online (Sandbox Code Playgroud)
当我正在尝试编辑学生时.我真的不理解"user_path"方法警报,因为我从未在视图中写过这个.(学生不是模特)我没有使用rails g scaffold来生成它.
谢谢
在我的StudentsController中:
def edit
@student = User.find(params[:id])
end
Run Code Online (Sandbox Code Playgroud)
在视图中(edit.html.erb):
<%= form_for(@student) do |f| %> ...
Run Code Online (Sandbox Code Playgroud)
在routes.rb中:
resources :students
Run Code Online (Sandbox Code Playgroud)
jvn*_*ill 92
你有一个students_controller
对应resources :students
你的线routes.rb
.这将创建使用students
like 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|
Run Code Online (Sandbox Code Playgroud)
现在,如果您正在使用部分调用_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
Run Code Online (Sandbox Code Playgroud)
小智 5
如果你因为命名空间而来到这里(就像 10 分钟前的我一样),你将需要这个:
对于命名空间路由,例如 admin_post_url:
Run Code Online (Sandbox Code Playgroud)<%= form_for([:admin, @post]) do |f| %> ... <% end %>
来自文档
归档时间: |
|
查看次数: |
34842 次 |
最近记录: |