我有个错误:

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

当我试图编辑一个学生时.我不太理解"user_path"方法alert ,因为我从来没有在视图中写过.(学生不是模型)我没有使用rails g scaffold生成它.

谢谢

在我的学生控制器中:

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

在视图(edit.html.erb)中:

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

在路由上.rb:

resources :students

推荐答案

你有一个students_controller,对应于routes.rb中的resources :students行.这会创建使用单词students的路由,比如students_pathnew_student_path.使用form_for(@record)时,url由objects类确定.在这种情况下,@recordUser,因此当对象是新记录时路径是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的分部,并且在new和edit操作上都使用该分部,则会出现问题,因为new和edit操作的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

Ruby-on-rails相关问答推荐

使用Hotwire/Turbo的Rails在链接悬停时获取请求

Rails turbo流只更新页面上的一个元素

使用ActiveSupport::TimeWithZone将UTC转换为用户定义的时区

Rails ActiveRecord::LogSubscriber 不输出详细查询日志(log)

如何断言 Ruby 单元测试中的错误消息?

rails turbo frame 显然在更新,但浏览器窗口保持不变

比较 Rails 中的日期

Rails 5:如何从数据库中删除列?

你能从 Heroku dynos/workers 中获得多少性能?

Rails:如何小写非英文字符串?

Rails - 生产模式下的错误

如何将字符串转换为类方法?

将根 url 重定向到 Rails 应用程序中的其他位置

通过字符串获取 ActiveRecord 对象的属性

登录delay_job?

在 Devise on Rails beta 3 中创建管理员用户

何时使用 Helpers 而不是 Partials

如何使用 Rails 3 获取请求的目标控制器和操作?

redirect_to 和 render 是可交换的吗?

我什么时候需要在 Rails 中重新启动服务器?