使用最小设置时,
def test_id
i = Item.new({
:id => 1,
:name => "Pencil",
:description => "You can use it to write things",
:unit_price => BigDecimal.new(10.99,4),
:created_at => Time.now,
:updated_at => Time.now,
:merchant_id => 2
})
assert_equal 1, i.id
end
由于某种原因,在创建时,调用id
属性会导致包含所有值的数组:
[1,'Pencil','You can use it to write things',#<BigDecimal...>, 2018-07-24 14:43:36 -0600, 2018-07-24 14:43:36 -0600, 2]
而不是整数1
。
在项目文件中,看起来像您期望的
require 'bigdecimal'
require 'time'
class Item
attr_reader :id, :created_at, :merchant_id
attr_accessor :name, :description, :unit_price, :updated_at
def initialize(item_data)
@id = item_data[:id].to_i,
@name = item_data[:name],
@description = item_data[:description],
@unit_price = BigDecimal.new(item_data[:unit_price], 4),
@created_at = item_data[:created_at],
@updated_at = item_data[:updated_at],
@merchant_id = item_data[:merchant_id].to_i
end
end
不太确定这是怎么回事。
在断言之前将pry
放入测试方法并调用i
会导致
#<Item:0x00007f8cc48eb4f0
@created_at=2018-07-24 15:14:55 -0600,
@description="You can use it to write things",
@id=[1, "Pencil", "You can use it to write things", #<BigDecimal:7f8cc48eb4c8,'0.1099E2',18(27)>, 2018-07-24 15:14:55 -0600, 2018-07-24 15:14:55 -0600, 2],
@merchant_id=2,
@name="Pencil",
@unit_price=#<BigDecimal:7f8cc48eb4c8,'0.1099E2',18(27)>,
@updated_at=2018-07-24 15:14:55 -0600>
在终端中。
答案 0 :(得分:2)
这是初始化程序中的尾随逗号:
def initialize(item_data)
@id = item_data[:id].to_i, # <=
@name = item_data[:name], # <=
他们所做的是让红宝石看到这样的方法:
@id = [item_data[id].to_i, @name = item_data[:name], ...]
答案 1 :(得分:1)
问题似乎出在每个设置变量末尾添加的逗号。检查以下代码:
require 'bigdecimal'
require 'time'
class Item
attr_reader :id, :created_at, :merchant_id
attr_accessor :name, :description, :unit_price, :updated_at
def initialize(item_data)
@id = item_data[:id].to_i
@name = item_data[:name]
@description = item_data[:description]
@unit_price = BigDecimal.new(item_data[:unit_price], 4)
@created_at = item_data[:created_at]
@updated_at = item_data[:updated_at]
@merchant_id = item_data[:merchant_id].to_i
end
end