我似乎无法在任何地方找到我的问题的答案,所以如果有人能帮助我,我可以帮助我更好地理解这个问题。
我有一个方法将变量传递到另一个模型的方法,以从表中获取packlist_id。比如在我的发票模型中我有:
def packlistid
Shipperline.packlist(@customerid, @shipqty)
end
customerid来自我的Invoice类中的另一个方法(效果很惊人),shipqty也来自我做过的另一个方法查询。
然后该方法进入Shipperline模型,该模型有一个方法self.packlist(customerid,shipqty):
def self.packlist(customerid, shipqty)
Shipperline.joins(:customerorderline, :shipper).select("cust_order_id").where(cust_order_id: customerid).pluck(:packlist_id).uniq
end
然后在我看来我有:
best_in_place invoice, :packlsitid, :as => :select, :class=>"best_in_place", :collection => invoice.packlistid
这是很好的原因我得到一个下拉选择框填充数字,如
76433
53422
43156
34231
然而,当我选择一个如76433时,进入数据库的值是1.我希望它是完全相同的值76433.
select时53422将数值2放在数据库中,依此类推。
这是具有最佳版本3.0.1的rails 4
如果有人能帮助我,我会非常感激。
答案 0 :(得分:1)
您可以在code上看到构建选项的选项,它将始终生成带有从1开始的整数键的哈希。这样,您必须将其映射回实际服务器上的值,通过生成相同的集合并从所选索引中选择结果 - 1,在控制器中
@selected_packlistid = @invoice.packlistid[params[:packlsitid] - 1]
这可能有点麻烦,特别是如果#packlistid
结果有可能在此期间发生变化。所以,我建议你依赖于另一个piece of the helper code,它指出当传递的值集合不是数组时,它只保留集合。那么你需要做的是生成packlistid
并将其转换为哈希值,其中键和值是相同的
list = @invoice.packlistid
@select_values = Hash[list.zip(list)]
然后将其传递给帮助者
best_in_place invoice, :packlistid, collection: @select_values
因为:collection
选项将用作here。请注意,它希望作为助手的第二个参数传递的属性返回应该标记的值,因为您可以在调用方法时看到here,并在设置时here作为显示值。