如何全面加入两种轨道型号?

时间:2013-05-03 02:18:53

标签: ruby-on-rails activerecord

我正在尝试加入'SupplierShippingItem'和'MtlSystemItem'的结果,但我一直收到错误:

  
    

未找到名为'mtl_system_items'的关联;也许你拼错了?

  

我的关联是这样完成的:

SupplierShippingItem.joins(:mtl_system_items).where('supplier_shipping_items.inventory_item_id = mtl_system_items.inventory_item_id SEGMENT1 ILIKE ? OR DESCRIPTION ILIKE ? ', "%#{params[:term]}%", "%#{params[:term]}%")

SupplierShippingItem

class SupplierShippingItem < ActiveRecord::Base

  attr_accessible :inventory_item_id, :received_qty, :shipped_qty, :supplier_shipping_list_id, :supplier_planning_schedule_id, :po_number

  belongs_to :mtl_system_item, :foreign_key => :inventory_item_id


end

* MtlSystemItem *

class MtlSystemItem < ActiveRecord::Base

  attr_accessible :inventory_item_id, :segment1, :description, :primary_uom_code, :inventory_item_status_code, :item_type

  has_many :supplier_shipping_items, :foreign_key => :inventory_item_id
end

我想要实现的是获取MtlSystemItem中的项目,但前提是它们在SupplierShippingItem中找到。我在MtlSystemItem中有成千上万的项目,所以我想过滤掉它们。我稍后还会包含日期限制,但我被错误阻止了。

2 个答案:

答案 0 :(得分:2)

如错误所示,找不到关联。您使用了mtl_system_items而不是mtl_system_item(单数),这是您声明的关联。

请记住,对于joinsincludes,您需要使用关联名称。对于where,请使用表格名称

SupplierShippingItem.joins(:mtl_system_item)
  .where('supplier_shipping_items.inventory_item_id = mtl_system_items.inventory_item_id SEGMENT1 ILIKE ? OR DESCRIPTION ILIKE ? ', "%#{params[:term]}%", "%#{params[:term]}%")

答案 1 :(得分:1)

SupplierShippingItem.joins(:mtl_system_items)


 should be


SupplierShippingItem.joins(:mtl_system_item)

上面的示例:

class SupplierShippingItem < ActiveRecord::Base
  belongs_to :mtl_system_item
end

class MtlSystemItem < ActiveRecord::Base
   has_many :supplier_shipping_items
end

你可以试试这个ActiveRecord加入:

SupplierShippingItem.find(:all, :joins => :mtl_system_item])

您可以为此查询添加条件,如下所示:

 SupplierShippingItem.find(:all, :joins => :mtl_system_item, :conditions => ["supplier_shipping_items.id = ?", 1]])