为什么 column_types 方法在 Rails 5.0 中未定义?
why the method column_types is undefined in Rails 5.0?
我正在为 class 赋值,它在 rspec 测试中使用 column_types 方法。
it "User database structure in place" do
expect(User.column_names).to include "password_digest", "username"
expect(User.column_types["username"].type).to eq :string
expect(User.column_types["password_digest"].type).to eq :string
expect(User.column_types["created_at"].type).to eq :datetime
expect(User.column_types["updated_at"].type).to eq :datetime
结束
错误:当我在命令行中 运行 rpsec 时。
Rails5.0
Ubuntu 14.10
Failure/Error: expect(User.column_types["username"].type).to eq :string
NoMethodError:
undefined method `column_types' for #<Class:0x000000053a0188>
Did you mean? columns
column_names
# ./spec/assignment_spec.rb:67:in `block (5 levels) in <top (required)>'
# ./spec/assignment_spec.rb:14:in `block (2 levels) in <top (required)>'
看起来像 rails 5,column_types
方法不再存在
该方法已在 this commit 中删除。找到它并不容易。
但是,原因是没有记录,因为方法本身没有记录(也许它只是供内部使用)。
见this comment:nodoc:
存在时的方法:
def column_types # :nodoc:
@column_types ||= columns_hash.transform_values(&:cast_type).tap do |h|
h.default = Type::Value.new
end
end
您可以通读 commit's 描述以了解原因,也许看看您是否还有其他可以做的事情。
编辑
看看these lines也许attributes_types
或columns_hash
可以解决你的问题。
方法 column_types
已在 Rails 5.
中删除
要获取列的类型,您可以尝试以下代码:
User.column_for_attribute('username').type
这将 return 类型,在您的情况下::string
您可以使用它来获取所有 column_types
的哈希值
User.columns_hash.each_with_object({}) { |obj, h| h[obj[1].name] = obj[1].sql_type }
我正在为 class 赋值,它在 rspec 测试中使用 column_types 方法。
it "User database structure in place" do
expect(User.column_names).to include "password_digest", "username"
expect(User.column_types["username"].type).to eq :string
expect(User.column_types["password_digest"].type).to eq :string
expect(User.column_types["created_at"].type).to eq :datetime
expect(User.column_types["updated_at"].type).to eq :datetime
结束
错误:当我在命令行中 运行 rpsec 时。
Rails5.0
Ubuntu 14.10
Failure/Error: expect(User.column_types["username"].type).to eq :string
NoMethodError:
undefined method `column_types' for #<Class:0x000000053a0188>
Did you mean? columns
column_names
# ./spec/assignment_spec.rb:67:in `block (5 levels) in <top (required)>'
# ./spec/assignment_spec.rb:14:in `block (2 levels) in <top (required)>'
看起来像 rails 5,column_types
方法不再存在
该方法已在 this commit 中删除。找到它并不容易。
但是,原因是没有记录,因为方法本身没有记录(也许它只是供内部使用)。
见this comment:nodoc:
存在时的方法:
def column_types # :nodoc:
@column_types ||= columns_hash.transform_values(&:cast_type).tap do |h|
h.default = Type::Value.new
end
end
您可以通读 commit's 描述以了解原因,也许看看您是否还有其他可以做的事情。
编辑
看看these lines也许attributes_types
或columns_hash
可以解决你的问题。
方法 column_types
已在 Rails 5.
要获取列的类型,您可以尝试以下代码:
User.column_for_attribute('username').type
这将 return 类型,在您的情况下::string
您可以使用它来获取所有 column_types
的哈希值User.columns_hash.each_with_object({}) { |obj, h| h[obj[1].name] = obj[1].sql_type }