我正在尝试加入'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中有成千上万的项目,所以我想过滤掉它们。我稍后还会包含日期限制,但我被错误阻止了。
答案 0 :(得分:2)
如错误所示,找不到关联。您使用了mtl_system_items
而不是mtl_system_item
(单数),这是您声明的关联。
请记住,对于joins
和includes
,您需要使用关联名称。对于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]])