0

いくつかのコンテキスト:ActiveRecordと関係、find_by_sqlまたはnamed_scopeから未使用レコードを取得していますか?

私はこの

俳優にhas_manyは

プロンプトプロンプトにhas_many BELONGS_TO、意思決定

意思決定にhas_manyの行為BELONGS_TO、

法belongs_toの俳優使徒のように見えるいくつかのモデルを持っています決定

私は何をする必要があることは目にありますすべての利用可能なプロンプトのうち、まだ使用されていないランダムなプロンプトを取得します。私のレールのアプリで

は、俳優はそれらを作るためにいくつかの選択肢を与えるプロンプトが提示されています。彼らが選択をすると(Decision)、それはActとしてdbに保存されます。

named_scopeとfind_by_sqlのさまざまな繰り返しを試しましたが、どれもうまくいきませんでした。私の思考が彼らのものから始めるのが正しいかどうかはわかりません。どこから始めるべきかを知っているようです。

私は、これは私が直面してるかのアイデアを与える願っています。私は攻撃の計画を形成するための一般的な指標さえも高く評価します。

ありがとうございます!

編集

数時間のために、この上で咀嚼した後、私が働いて何かを持っているが、それは非常に厄介だし、私のログはSQLコールで満たされているので、それは間違いなく、批判的な目を立てることができます。

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中:アクターモデルでは

named_scope :available, lambda { |used| 
    { :conditions => ["id NOT IN (?)", used ] } 
    } 

:プロンプトモデルで

@prompt = Prompt.available(@actor.used_prompts).find(:first, :order => "RAND()") 

明らかused_promptsであれば、ブロックが1人の有罪当事者でありますここでは、私はself.acts.decisions.eachまたはselfを行うことができないので、それに対処するより良い方法を知らないそのようなもの。たぶん誰かが学校に私:)

+0

は本当にFYIあなたのクエリが遅くなります。 –

答えて

0

最も簡単な方法は、使用されるように関連するプロンプトをマーク決定モデル上のafter_createまたは類似したコールバックを追加することであろうことができます。いくつかの結合を使用してこれを達成することもできますが、これはもう少し作業が必要になり、スケーラビリティの問題につながります(気にする場合)。 RAND()を使用して

+0

応答のプレストンに感謝します。残念ながら、プロンプトは別々のアクタごとに再利用されるため、フラグを設定すると他の問題が発生します。あなたはしかし、スケーラビリティについてのポイントを持っているかもしれないが、私は、私はすでに – John

+0

は私が理解してみましょう:)そのポイントを超えていることを恐れています。あなたの目標は、選択されていない(その俳優による)プロンプトだけを俳優に提供することです。 –

+0

正しい。プロンプトは他のアクターによる使用のためにリサイクルされますが、個々のアクターには一度だけプロンプトが与えられます。テキストベースのゲーム中にプロンプ​​トが表示されるので、プロンプトを繰り返し入力すると、ゲームプレイはやや不自由なものになります。15人のインスタンスのうち、同じ質問を3〜5回聞かれたい人はいますか?私たちは、アプリをテストした子供たちは、かなり明確に、微妙な彼らの欠如を祝福した:) – John

関連する問題