Rails集合帮助。不了解它是如何工作的

时间:2014-12-23 16:01:17

标签: ruby-on-rails-4 form-for

我有大约3个模型,彼此都有关系。

Class Invoice < ActiveRecord::Base


  belongs_to :shipperline, foreign_key: 'receiver_quantity'


  def shippedqty
     Shipperline.getshippqty(@customerid).to_a.split
  end

然后我有一个shipperline模型

Class Shipperline < Activerecord::Base


has_many :invoices


def self.getshippqty(customerid)
  Shipperline.joins(:customerorderline, :shipper).select("cust_order_id").where(cust_order_id: customerid).order("shipped_qty").pluck(:shipped_qty).uniq
end

但是在我的表单中(这是在我的主视图中,因为此查询通常会为每张发票返回4到5个结果,这就是为什么我需要用户选择它真正属于哪一个。

所以我一直在尝试

<%= form_for :invoice do |f| %>

<td id="putcolor"><%= f.select :shippedqty, Shipperline.getshippqty(@customerid).to_a.split %>  </td>

<% end %>

但它变空了。我也尝试过collection_select,这也不起作用。

  <td id="putcolor"><%= f.collection_select :invoice_id, @shipqty, :id, :shippedqty %></td>

然后我得到nil的未定义方法'map':NilClass

有人可以解释我做错了什么或请指出我正确的方向吗?我对rails很新。

还有一种更好的方法来尝试获取一个包含这些不同结果的选择框供用户选择吗?

1 个答案:

答案 0 :(得分:0)

通过这种方式让这项工作变得更加轻松。

我的Invoice_helper.rb

 def options_for_invoices(customerid)
      Invoice.shippedqty2(customerid)
 end

 def options_for_packlistid(customerid, shipqty)
      Shipperline.packlist(customerid, shipqty)
 end

然后在我的表格中我做了:

<%= form_for(@invoice) do |f| %>
    <%= f.label :shippqty %>
    <%= f.select :shippedqty, options_for_invoices(@invoice.customerorderid) %>
    <br />
    <%= f.label(:packlistid %>
    <%= f.select :packlistid, options_for_packlistid(@invoice.customerorderid, @invoice.shippedqty) %>
    <%= f.submit %>
<% end %>

现在,当它显示具有正确值的下拉集合时,并为数据库中的每条记录插入正确的值。