0

has_manyのおもちゃを持っている人がいるとしましょう。それから私はhas_many色のおもちゃを持っています。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を学んでいます。

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 に答える