我被建议不要在我的数据库中存储数组,而只是ID。在我的项目中,我存储了行项目的ID。如果我没有line_item OBJECT,但只有ID,我是否仍然可以循环遍历循环以获取与之关联的所有数据?
进一步解释......
传统上我觉得我有
@line_item
>> <LineItem id: 63, product_id: 2, created_at: time, (etc) >
然后我可以做类似
的事情@line_item.title
>> "T-Shirt:Small"
但是,如果我做了
@line_item
得到了
>>[12, 14]
我可以使用@ line.item.each并从视图中的ID中获取所需的所有信息吗?或者我是否必须创建自己的可怕方法?
希望我提出我的问题是可以理解的。
感谢。
答案 0 :(得分:1)
你可以这样做:
@items = [12,14] # your list of ids you got from somewhere
@items.each do |id|
@line_item = LineItem.find(id) # Get the instance for that id.
# do stuff.
end
您也可以这样做:
@line_items = LineItem.find(@id_list)
如果存储id列表的原因是捕获关系,那么您应该查看rails提供的belongs_to和has_many关系。通过存储列表来对数据进行去标准化是很糟糕的,因为您不知道列表的长度。它可以阻止您的数据库正确编制索引,并且很难维护。
答案 1 :(得分:0)
我建议您使用:
LineItem.where(id: [12,14])
因为它将始终返回一系列项目。如果您尝试查找数据库中没有的项目,您会发现找不到记录错误。如果没有找到记录,这将呈现一个空数组。
只要你有一个数组,无论是否为空,你都不必拯救.each方法,因为它无论如何都不会失败。