0

可以说我有一个拥有很多玩具的人。然后我有一个具有多种颜色的玩具。我在我的 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 中,我想将 Toys 过滤为一系列颜色。

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。

4

1 回答 1

1

如果您想采用 DB 方法,您可以执行以下操作:

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
于 2013-03-26T21:52:23.067 回答