我有大约30个项目的设置表,所有这些表都在不同的位置使用。我对应用程序控制器中的某些数据进行了一次调用,并认为我可以节省一些cpu周期并构建一些collection_select sql调用,作为从第一次传递到设置表的数组构建的数组。
我有一个集合,要求我从数据库传递两个值。
我可以创建一个仅将单个列传递给collection_select的数组。当我尝试传递两列数据时,我碰壁了。这是由sql调用构建的数组,其中包含结果数据。
@myscosts = Setmeup.find_by_sql("select (t_is || '--' || description) as shipr, description::float as cost from setmeups where active is true and g_is = 'Ship' order by t_is, srby;")
shipr | cost
----------------------+------
FedEx_Large--17.00 | 17
FedEx_Medium--7.00 | 7
FedEx_Small--5.00 | 5
Self_Delivery--1.00 | 1
USPS_2d_Large--9.00 | 9
USPS_2d_Medium--5.00 | 5
USPS_2d_Small--3.00 | 3
(7 rows)
在应用程序控制器中,我有以下代码:
@setups = Setmeup.find_by_sql("select g_is, t_is, srby, description from setmeups where active = 'true' order by g_is, srby;")
# puts @setups.class
@setups.each do |f|
@title = "#{f.description}" if "#{f.g_is}" == "App" && "#{f.t_is}" == "Title"
(more code here, the next stanza works for a collection)
if f.t_is == 'Process' then
@steps << "#{f.srby} - #{f.description}"
end
(I can not find the right way to make this one work.)
if "#{f.g_is}" == 'Ship' then
@shpr = "#{f.t_is} -- #{f.description}"
@cst = "#{f.description}".to_f
@myscosts << "[#{@cst}, #{@shpr} ]"
end
(results of above in log..)
myscosts == ["[5.0, FedEx_Small -- 5.00]", "[3.0, USPS_2d_Small -- 3.00]", "[1.0, Self_Delivery -- 1.00]", "[5.0, USPS_2d_Medium -- 5.00]", "[7.0, FedEx_Medium -- 7.00]", "[9.0, USPS_2d_Large -- 9.00]", "[17.0, FedEx_Large -- 17.00]"]
Rails验证步骤抛出错误,因为传递了值: “ shipping_quoted” =>“ [\” 5.0 \“,\” FedEx_Small-5.00 \“]”不是数字。
这在sql查询创建数组时通过: “ shipping_quoted” =>“ 5.0”
以上示例中的数据并不构成所有设置变量和选项。下面是程序中将集合与直接SQL查询创建的数组'@myscosts'结合使用的方法:
<%= form.label :shipping_quoted %>
<%= form.collection_select :shipping_quoted, @myscosts, :cost, :shipr %>
这是collection_select我在动态创建一个模仿sql查询结果的数组时遇到了麻烦。这是一个我可以使用的collection_select(仅传递一个值)的示例(但我不明白:to_s如何充当别名):
<%= form.label :step %>
<%= form.collection_select :step, @steps, :to_s, :to_s %>
我的希望是希望有人能帮助我了解如何执行以下操作: (在模型或控制器中)
@a1 = sql("select * from xytable";) # where @a1[0..n].y = 'Y'
@a1.each do |k|
if k.y != 'Y'
@a2 << "#{k}" # or "#{k.inspect}"
end
end
这样的数组@ a2与数组@ a1具有相同的类类型,结构和键值对。然后,我可以在像@myscosts生成的sql数组之类的集合中使用@ a2。
感谢您的回复,我希望我已经用这些附加数据回答了您的问题。