【问题标题】:Rails returns an empty active record and failed to initialize the attributes in side the modelRails 返回一个空的活动记录,并且无法初始化模型中的属性
【发布时间】:2016-11-09 16:43:12
【问题描述】:

当我初始化新模型对象时,我得到一个空的活动记录。

2.3.0 :030 > user = User.new
=> #<User > 
2.3.0 :031 >

当我访问模型中存在的属性时,它会返回类似的错误

2.3.0 :031 > user.UsersName
NoMethodError: undefined method `UsersName' for #<User >

用户模型:

class User < ActiveRecord::Base  
    attr_accessible :UserName, :Password, :RoleId, :EmployeeId, :Password_confirmation
end

【问题讨论】:

  • 好奇你为什么要使用这样一个后级版本的rails?但它应该是user.UseName,而不是UsersName。下面你说它只适用于某些版本的sql server? Sql Server 版本、FreeTDS/TinyTDS 版本等中的任何差异。如果比较 2 个 sql 服务器之间的字段名称是否相同(相同大小写等)。 ActiveRecord 使用自省使字段可访问。对于咯咯笑,不妨试试user.user_name 看看是否可行?

标签: ruby ruby-on-rails-3 activerecord


【解决方案1】:

请确保以下任何一项为真:

  1. 您的模型User 继承自ActiveRecord::Base,并且您的users 表中有一个UserName 列。不过,按照惯例,我们不应该让属性名称以大写字母开头。

编辑-您可以从“用户名”中跳过“用户”,因为它是多余的,并将其替换为 user.name。为此,您应该在 users 表中包含 name 列,并且不需要在模型中定义其他任何内容。

  1. 如果不是上述情况,那么你必须有一个attr_accessor :UserName或者

  2. 你必须有一个方法def UserName。不确定大写字母在这里是否有效。

另外,我建议您定义所有以小写字母开头的字段。

【讨论】:

  • 嗨 Jagdeep,感谢您的帮助,实际上我正在使用 sqlserver 进行 DB。问题是当我连接 sqlserver 时,我在某些地方重新定位,但是当我在本地系统中连接 sqlserver 时工作正常。
【解决方案2】:

您的模型声明 UserName 可访问,但您正在调用 UsersName (user.UsersName)。

你试过user.UserName吗?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-06-04
    • 1970-01-01
    • 1970-01-01
    • 2023-04-03
    • 2013-12-16
    • 2021-08-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多