Rails 4最佳选择集合

我似乎无法在任何地方找到我的问题的答案,所以请帮助我,如果有人可以我试图更好地理解这一点。

我有一个方法将变量传递到另一个模型的方法,以从表中获取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

如果有人可以帮助我,我会非常感激。

您可以在代码上看到构建选项的选项,它将始终生成带有从1开始的整数键的哈希。这样,您必须通过生成将其映射回服务器上的实际值相同的集合并从所选索引中选择结果 – 1,因此在您的控制器中

 @selected_packlistid = @invoice.packlistid[params[:packlsitid] - 1] 

这可能有点麻烦,特别是如果#packlistid结果有可能在此期间发生变化。 所以,我建议你依赖于另一段帮助代码 , 该代码声明当传递的值集合不是数组时,它只保留集合。 那么你需要做的是生成packlistid并将其转换为散列,其中键和值是相同的

 list = @invoice.packlistid @select_values = Hash[list.zip(list)] 

然后将其传递给助手

 best_in_place invoice, :packlistid, collection: @select_values 

因为:collection选项将在这里使用 。 请注意,它希望作为助手的第二个参数传递的属性返回应该标记的值,正如您在调用该方法时可以看到的那样,并且此处将其设置为显示值。