我的控制器正在检索以下内容:
def index
@segments = Segment.all
@products = Product.all
end
但这不是我想要的。我想根据其segment_id
迭代产品。像这样:
def index
@segments = Segment.all
@products = Product.where(segment_id: x)
end
问题是:如何将x
从视图传递到控制器?
我的观点是:
- @segments.each do |s|
- @products.each do |p|
This is a product from #{s.name}.
好的,问题在哪里?我没有展示特定细分的具体产品。我展示了所有细分的产品。我需要的是这样的事情:
- @segments.each do |s|
- @products(segment_id: s.id).each do |p|
This is a product from #{s.name}.
你知道吗?
答案 0 :(得分:5)
在细分和产品模型之间设置has_many
关联。
class Segment < ActiveRecord::Base
has_many :products
end
class Product < ActiveRecord::Base
belongs_to :segment
end
在segment_id
表中添加products
。
使用
生成迁移 rails g migration add_segment_id_to_products segment_id:integer:index
运行rake db:migrate
设置关联将为您提供动态方法products
,您可以在视图中使用该实例进行迭代。
然后将索引操作更新为:
def index
@segments = Segment.all
end
将视图更新为:
- @segments.each do |s|
- s.products.each do |p|
This is a product from #{s.name}.
答案 1 :(得分:0)
这会吗?
def index
@segments = Segment.includes(:products).all
end
在你看来:
- @segments.each do |s|
- s.products.each do |p|
This is product #{p.name} from segment #{s.name}
如果你想以任何你需要的方式过滤它们,你可以为segmens和产品的查询添加条件。
Segment.includes(:products).where(:seg_val => 'something', :product => [:prod_val => 'other']).all