いくつかのコンテキスト:
こんな感じのモデルもいます
アクター has_many Acts
行為はアクターに属し、決定に属します
決定 has_many Acts, belongs_to Prompt
プロンプト has_many 決定
私がする必要があるのは、ActorsController で、利用可能なすべてのプロンプトのうちまだ使用されていないランダムなプロンプトを取得することです。
私の Rails アプリでは、アクターにいくつかの選択肢を与えるプロンプトが表示されます。彼らが選択 (決定) を行うと、それはデータベースに Act として保存されます。
私はnamed_scopeとfind_by_sqlのさまざまな反復を試みましたが、どれもうまくいきませんでした。また、非常に多くのモデルが動作していて、私が知らないように見えるため、最初から私の考えが正しかったかどうかさえわかりません.どこから始めれば。
これが私が何に反対しているかのアイデアを与えることを願っています。攻撃の計画を立てるための一般的な指針さえいただければ幸いです。
ありがとう!
編集
これを数時間噛んだ後、何かが機能しましたが、非常に面倒で、ログがSQL呼び出しでいっぱいになっているため、批判的な目で見られることは間違いありません.
プロンプト モデルでは:
named_scope :available, lambda { |used|
{ :conditions => ["id NOT IN (?)", used ] }
}
アクター モデルでは:
def used_prompts
prompts = Array.new
if self.acts && self.acts.length >= 1
self.acts self.acts.each { |act| prompts.insert(0, act.decision.prompt.id) }
return prompts.sort
else
return [0]
end
end
そして ActorsController で:
@prompt = Prompt.available(@actor.used_prompts).find(:first, :order => "RAND()")
明らかに、used_prompts の if ブロックはここで 1 つの有罪の当事者ですが、self.acts.decisions.each などを実行できないため、これに対処するより良い方法はわかりません。たぶん誰かが私を教えてくれます:)