私はレールを学び、場所、カテゴリ、有効期限の3つの要素に基づいて製品が表示される製品ライブラリを設定しようとしています。ただ1つの有効期限)。有効期限が過ぎていない限り製品が表示され、場所とカテゴリの選択はドロップダウンメニューを介して行われます。レール:複数のパラメータに基づいて製品を表示
私は解決策を見つけた場所とカテゴリの選択基準を組み込むことが難しいうちにこの問題を書いていましたが、何ができるかについての助けがあれば大いに感謝します。
私は接続を通じてhas_manyを使用して、製品、場所、カテゴリ間の接続を作成しました。ここで
はモデルです:
class Product < ActiveRecord::Base
has_many :categorizations
has_many :categories, :through => :categorizations
has_many :localizations
has_many :locations, :through => :localizations
end
class Categorization < ActiveRecord::Base
belongs_to :product
belongs_to :category
end
class Category < ActiveRecord::Base
has_many :categorizations
has_many :products, :through => :categorizations
end
class Localization < ActiveRecord::Base
belongs_to :product
belongs_to :location
end
class Location < ActiveRecord::Base
has_many :localizations
has_many :products, :through => :localizations
end
は、ここに私のコントローラです。場所&カテゴリID年代はのparamsとして渡されており、製品の有効期限は、現在の時間よりも大きくなければなりません:
class LibraryController < ApplicationController
def index
@products = Product.find(:all, include => [ :locations, :categories ],
:conditions => ['expiry_date > ? AND locations.id = ? AND categories.id = ?',
Time.now, params[:location_id],params[:category_id]])
end
end
ので、URLにlocation_idのとCATEGORY_IDのparamsを渡すことで、私は両方の組み合わせによって製品を一覧表示することができます。
私がしようとしていることを達成するためのより良い方法はありますか?
「より良い」と定義します。あなたのコードは現在動作していますか?それは間違いを投げているのですか?それはあなたの予想よりも遅いですか?改善したい実際の問題は何ですか(つまり、どのような種類のヘルプをお探しですか)。 – jefflunt
私は、全体的なアプローチが正しいのか、それとも間違っているのか疑問に思っています。コードは現在私が望むことをしますが、私がよりよく言えばもっと一般的なアプローチがありますか? – shane