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] } %>