Rails 4最佳选择集合

时间:2014-12-19 16:12:45

标签: ruby-on-rails ruby-on-rails-4 best-in-place

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

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

答案 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作为显示值。