将Model.find_by_sql触发为;
data = Setup::Type.find_by_sql ["SELECT value FROM table WHERE type_cd = 'print_format' AND subtype_cd = 'schedule_print_format'"]
该对象返回为;
#<Setup::Type:0x60c42f0>
#<Setup::Type:0x60c4140>
#<Setup::Type:0x60c3f90>
使用&#39;检查&#39;对数据起作用,它重新出现
[#<Setup::Type value: "SalesReceipt_Bhindi_sch.rpt">, #<Setup::Type value: "SpecialOrder_Bhindi_sch.rpt">, #<Setup::Type value: "ReturnReceipt_Bhindi_sch.rpt">, #<Setup::Type value: "Takepayment_Bhindi_sch.rpt">]
在使用data.class时,它返回Array。
然而,这可以很好地用作&#39;哈希&#39;据我所知,
data.each do |name|
xml = Hpricot::XML(%{
<params>
<from_trans_date>#{date_for_transaction}</from_trans_date>
<to_trans_date>#{date_for_transaction}</to_trans_date>
<print_format>#{name.value}</print_format>
<company_id>#{company_id}</company_id>
</params>
})
我的问题是,为什么&#39;数据&#39;表现得像哈希,就像&name; value.value&#39;。
这样的实现由于
答案 0 :(得分:1)
find_by_sql
正在返回Setup::Type
个对象的数组。当您遍历数组时,您将获得使用Setup::Type
变量访问的name
实例。因此name.value
正在发挥作用。
如果您将name
更改为type_obj
,则会更清楚,
data.each do |type_obj|
xml = Hpricot::XML(%{
<params>
<from_trans_date>#{date_for_transaction}</from_trans_date>
<to_trans_date>#{date_for_transaction}</to_trans_date>
<print_format>#{type_obj.value}</print_format>
<company_id>#{company_id}</company_id>
</params>
})
这来自find_by_sql的文档。可能有帮助。
对您的数据库执行自定义SQL查询并返回所有 结果。结果将作为包含列的数组返回 请求封装为您调用此方法的模型的属性 从。如果您调用Product.find_by_sql,那么结果将是 在具有您在中指定的属性的Product对象中返回 SQL查询。