【问题标题】:undefined method `model_name' for User:Class用户:类的未定义方法“model_name”
【发布时间】:2014-05-16 12:46:03
【问题描述】:

下面是我的form

<%= form_for @user, {class: "form-horizontal", id: "signupform"} do |f| %>    
<% end %>

下面是我的PersonController

class PersonController < ApplicationController
  def new
      @user = User.new
  end    
end

当我尝试导航到 http://localhost:3000/person/new 时,出现以下错误。

undefined method `model_name' for User:Class

用户模型

class User << CustomService 
  verbose true

  get :all, '/users/'
  post :login, '/signin'

end

【问题讨论】:

  • 你能把你的User模型的代码也贴出来
  • @rkon:更新了用户模型类。
  • 你的问题有一些线索:stackoverflow.com/questions/10823736/…
  • 如果你用谷歌搜索“未定义的方法`model_name'”,你会遇到很多关于这个的问题。

标签: ruby-on-rails ruby ruby-on-rails-4


【解决方案1】:

我认为您不想指定@user,而只需使用符号(:user)。请尝试一下。

你的代码应该是这样的,

<%= form_for :user, url: users_path, method: :post, {class: "form-horizontal", id: "signupform"} do |f| %>    
<% end %>

注意:users_path => 您的帖子路径。

【讨论】:

  • 这是答案还是评论?
  • 为什么使用符号?,你能解释一下吗?
  • theJva:我们有很多方法可以为对象创建表单,a)您可以像@user 一样指定对象,因此从指定对象中提取所有必需的参数,例如动作、方法等... b)您可以为符号指定表单,例如:用户,然后您需要指定网址,方法。
【解决方案2】:

可能您的 User 类不是从 ActiveRecord::Base 继承的,如下所示:

class User < ActiveRecord::Base
 #your attributes and methods
end

尝试从这个基类继承 User。

希望对你有帮助。

【讨论】:

    【解决方案3】:

    User 类在您的代码中不是 ActiveRecord model。因此,当您创建 User.new 时,它只是返回裸 ruby​​ 类(不适用于 Rails)

    查看Rudy Sidinger 的回答,了解如何正确执行此操作


    此外,您可能希望查看您课程的这一部分:

      get :all, '/users/'
      post :login, '/signin'
    

    为什么要在模型中定义路线?我只在config/routes.rb 文件中定义过这样的路由:

    #config/routes.rb
    resources :users, only: :index, path_names: { index: "all" } do #-> routes to /all for users idnex
        collection do
            post "signin", action: :login 
        end
    end
    

    【讨论】:

      猜你喜欢
      • 2021-09-23
      • 1970-01-01
      • 1970-01-01
      • 2011-12-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多