过滤空相关字段 - Rails

时间:2015-12-02 15:52:00

标签: ruby-on-rails postgresql join nested-forms

提出这个问题,因为我没有找到任何可以帮助我解决问题的主题。 背景:Rails相对较新,构建了一个订单管理系统。为简化起见,我有3个模型,我遇到了一个问题:Item,SupplierQuote和SupplierQuoteDetail

项目给出了项目的名称,描述和部件号

 class Item < ActiveRecord::Base
   has_many :supplier_quote_details
   has_many :supplier_quotes, through: :supplier_quote_details

SupplierQuote为报价提供报价参考和日期

 class SupplierQuote < ActiveRecord::Base
    has_many :supplier_quote_details
    has_many :items, through: :supplier_quote_details
    accepts_nested_attributes_for :supplier_quote_details, 
    :reject_if => lambda {|x| x[:item_id].blank? }, allow_destroy: true

SupplierQuoteDetail根据特定报价

为物品定价
 class SupplierQuoteDetail < ActiveRecord::Base
    belongs_to :item
    belongs_to :supplier_quote

当我输入新的引号时,我有一个嵌套的表单(带有字段),并且在嵌套的field_for中我有一个select标签,允许我选择一个我可以输入价格的项目。但是在我的选择下拉列表中,我只想要我之前没有价格输入的值。所以在我的supplier_quotes_controller中,我有:

@items = Item.joins(:supplier_quote_details).merge(SupplierQuoteDetail.where(unit_price: nil))

但是这给了我一个空的下拉菜单! (它不应该因为我有很多没有价格的物品):

 <%= f.fields_for :supplier_quote_details, :wrapper => false do |it| %>
   <tr class="fields">
     <td><%= it.select(:item_id, @items.map {|item| [[item.description, item.PN, item.SN].join("   |   "), item.id]}) %></td>

请帮忙!如何在此相关字段中正确过滤?以上是我发现的唯一方法。

非常感谢你!

一个。

1 个答案:

答案 0 :(得分:1)

试试这个:

 Item.includes(:supplier_quote_details).where( :supplier_quote_details => { :unit_price => nil }