2

Railsアプリのすべてのページで、データベース内の単一のテーブルから単一の(ランダムに選択された)オブジェクトをロードしようとしています。

たとえば、テーブルに複数の引用符が含まれる引用符テーブルがあり、ページの読み込みごとに 1 つだけが必要です。

これを達成するための最良の方法は何ですか? 明らかに、クエリを各コントローラーにコピーして貼り付けることは、これを行う正しい方法ではありません。

4

3 に答える 3

3

これには使用before_filterしません。リダイレクト アクションやその他の「レンダリングされない」アクションでデータベースにアクセスする必要はありません。代わりに を使用helper_functionし、とにかく配置する必要があるため、レイアウトで呼び出します。

def random_quote
  @quote ||= "Select random quote here"
end

helper_method :random_quote

見積もりの​​選択方法はあなた次第です。random_quoteレイアウトで通常のヘルパー メソッドとしてアクセスするだけです。これは、レイアウトがレンダリングされている場合にのみ、アクションごとに 1 つの見積もりにのみアクセスします。

于 2012-08-06T10:02:10.263 に答える
1

この種のものは通常before_filter、ApplicationControllerに含まれます。

before_filter :get_random_quote

#This code is executed before every action of your app
def get_random_quote
  random_id = ...#Generate a random ID ...
  @random_quote = Quote.find(random_id)
end

次に、あなたの見解では、を参照してください@random_quote。終わり!

編集:考え直してみると、Matziソリューションの方が賢いようです。リクエストは、実際に何かを出力したときにのみ呼び出されます。無駄なことは何もありません。

于 2012-08-06T01:29:28.513 に答える
0

PostgreSQL の場合:

before_filter :get_quote

def get_quote
  @quote = Quote.order('RANDOM()').limit(1)
end
于 2012-08-06T09:43:16.173 に答える