Ruby on rails RubyonRails集合\u选择复杂性

Ruby on rails RubyonRails集合\u选择复杂性,ruby-on-rails,associations,ruby-on-rails-3.2,Ruby On Rails,Associations,Ruby On Rails 3.2,我有以下问题,我的客户账单视图中有以下问题 <%= f.collection_select :product_id,Product.all,:id,:name %> 获得以下输出 <%= f.select :product_id, options_for_select(getting_prod_names) %> 有什么帮助吗??) 创建表单时,用于创建集合的数据不限于要为其创建对象的类。您可以简单地执行以下操作: <%= f.collection_sel

我有以下问题,我的客户账单视图中有以下问题

<%= f.collection_select :product_id,Product.all,:id,:name %>
获得以下输出

<%= f.select :product_id, options_for_select(getting_prod_names) %>


有什么帮助吗??)

创建表单时,用于创建
集合的数据不限于要为其创建对象的类。您可以简单地执行以下操作:

<%= f.collection_select :product_id,StoreOpeningStock.all,:product_id ,:name %>

你需要澄清你的模型之间的关系

但只是给你一个想法。您可以在与视图(显示集合的位置)相关的
操作
中定义要在
控制器
中显示的产品集合

控制器:

@products= #here you should call all products you want
然后,您的产品集合可以显示为:

<%= f.collection_select :product_id, @products,:id,:name %>

编辑

您需要修改模型之间的关系。一个
产品
有许多
客户账单
,但您确定每个
客户账单
都属于一个
产品

我认为您有多对多的关系,因为
客户账单
也可以有许多
产品

如果我理解正确,解决方案是在这种多对多关系之间创建一个
ProductLine
模型

另外,
产品
商店开放库存
之间有什么区别?
StoreOpeningStock
中包含了哪些属性?

如果您创建此模型只是为了显示产品的可用性,为什么不在
产品
模型中添加一个属性,例如一个名为
可用性
的布尔列,以便查找所有具有StoreOpeningStock的产品。 这只是一个模型问题,与助手无关

class Product
  # Find all products that have a StoreOpeningStock
  def self.in_stock
    find(StoreOpeningStock.product_ids)
  end
end

class StoreOpeningStock
  # Collect all product ids from stocks
  def self.product_ids
    uniq.pluck(:product_id)
  end
end

现在,您可以使用Product.in_stock而不是Product.all来存储唯一的产品。

我想为您的产品模型添加一个范围:

class Product< ActiveRecord::Base
    has_many :store_opening_stocks
    has_many :customer_bills
    attr_accessible :name

    scope :having_store_opening_stocks, :joins => : store_opening_stocks, :select => 'distinct product.*', :conditions => 'store_opening_stocks.product > 0'
end
类产品:门店开盘库存,:select=>“独特产品。*”,:conditions=>“门店开盘库存.product>0”
结束
然后,您可以使用Product.all.having_store_opening_stocks仅选择有此类库存的产品,例如:

<%= f.select :product_id, Product.having_store_opening_stocks.map { |product| [product.name, product.id] } %>


我正在获取未定义的方法
名称
。。。!!感谢lot bro+1为您提供答案:)您所说的“StoreOpeningStock”模型中的产品列表是什么意思?@SemyonPerepelitsa-“StoreOpeningStock”模型有产品id,产品类有名称,我希望从StoreOpeningStock模型中选择产品id,并在客户账单中选择收款时显示名称。。!!你能解释一下你的模型关系吗?在问题中,你说StoreOpeningStock有product_id(即股票属于某个产品),但在这里你说它有product_id(即股票有许多产品)。作为旁注,请不要过度使用标点符号,这会使你更难理解你写的内容。@SemyonPerepelitsa-对不起,是的,我已经用关联编辑了这个问题,请告诉我这是否足够,或者我应该做任何其他关联?因此,你有一种产品与一种股票关联。您想从哪些产品列表中选择?为什么不是所有的产品都能让你满意呢?谢谢你的建议。现在我可以得到产品,但不能正确显示它,我得到了问题屏幕截图中显示的错误-而不是助手使用控制器。哇,这让我清楚地了解了这些关系,以及我应该如何使用它们,以备将来参考。谢谢你,伙计。:)谢谢Semyon,但是
pulk
uniq
有点让人困惑,你能告诉我有什么文档或博客可以浏览吗?:)Rails官方文档非常好,只要在那里输入“pulk”。这个
uniq.pluck(:product_id)
基本上是Ruby数组的
map(&:product_id).uniq
的SQL等价物。换句话说,它从表记录中收集所有产品ID。这很简单而且干净…谢谢你克里斯:)我得到了一个未定义的错误方法“having_store_opening_stocks”for#你应该从
product.all.having_store_opening_stocks
class Product
  # Find all products that have a StoreOpeningStock
  def self.in_stock
    find(StoreOpeningStock.product_ids)
  end
end

class StoreOpeningStock
  # Collect all product ids from stocks
  def self.product_ids
    uniq.pluck(:product_id)
  end
end
class Product< ActiveRecord::Base
    has_many :store_opening_stocks
    has_many :customer_bills
    attr_accessible :name

    scope :having_store_opening_stocks, :joins => : store_opening_stocks, :select => 'distinct product.*', :conditions => 'store_opening_stocks.product > 0'
end
<%= f.select :product_id, Product.having_store_opening_stocks.map { |product| [product.name, product.id] } %>