假设我有一个有很多玩具的人。然后我有一个有很多颜色的玩具。我在Person#show方法中尝试做的是过滤包含各种颜色的玩具。
class Person < ActiveRecord::Base
attr_accessible :name
has_many :toys
end
class Toy < ActiveRecord::Base
attr_accessible :size
belongs_to :person
has_many :colors
end
class Color < ActiveRecord::Base
attr_accessible :color
belongs_to :toy
end
然后在我的PersonController中,我希望过滤玩具是一系列颜色。
class PersonController < ApplicationController
def show
@person = Person.find(params[:id])
# Now I want to filter by toy colors that might be red or blue or purple or etc...
# So when in my view I do @person.toys I know they only contain the filtered colors
@person.toys.categories
end
end
非常感谢帮助或建议。仍在积极学习Rails。
答案 0 :(得分:1)
如果您想采用数据库方法,您可以执行以下操作:
if params[:toy_colors].nil?
@toys = @person.toys
else
colors = params[:toy_colors].split(',')
# NOTE. You should obviously check that the colors array
# contains only expected colors to avoid any sql injection.
@person.toys.joins(:colors).where('colors in ?', colors)
end
其中颜色作为参数传递,例如。
http://localhost:3000/person/1?toy_colors=red,green