0

Rails アプリのヘッダー パーシャルに、ランダム レコードにリンクする「シャッフル」ボタンを作成する方法を考えています。「ピン」テーブルがあり、各ピンはビデオです。

私はstackoverflowを検索しましたが、それを行う方法を理解できませんでした..ヘッダーのパーシャルがピンコントローラー/モデルで機能しないことに関係していると思います。

誰かがボタンをクリックすると、次のようにリンクする必要があります。

website.com/pins/13

どんな助けでも大歓迎です!

編集:これは私が以前に試したコードです:

offset = rand(Model.count) rand_record = Model.first(:offset => オフセット)

しかし、私はレールに不慣れで、どこに置くべきかわかりませんでした。モデルとコントローラーに入れてみましたが、どちらもうまくいきませんでした。

4

1 に答える 1

1

ユーザーが特定のページをロードするたびに、ランダムなモデルへのリンクを表示したいとします。このリンクを表示するページが ModelController#index アクションであるとします。

ランダム化はページが最初に読み込まれたときにのみ発生するため、コントローラー アクションで行うことができます。

class ModelController < ActionController::Base
  #other actions

  def index
    #any other index code
    @random_model = Model.order('random()').first
  end
end

ビューで、通常の方法でそのモデルにリンクできます。

<%= link_to("Shuffle", @random_model, :class => "btn btn-small btn-warning") %>

コントローラー アクションが実行されるたびに、モデルがランダムに選択され、ページをレンダリングするときにそのモデルへのリンクが含まれます。

対処するために編集されました: 「コードをインデックスに入れてアクションを表示せずに動作させる方法はありますか?」

はい。実際には、モデルをビュー コードで直接読み込むことができます。通常はコントローラ内のインスタンス変数に代入するのが「より正しい」方法なのですが、ご指摘の通りコードの重複につながります。これを複数のビューに含めたい場合は、パーシャルにすることをお勧めします。そのようなもの:

ビュー/共有/_shuffle.erb:

<%= link_to("Shuffle", Model.order('random()').first, :class => "btn btn-small btn-warning") %>

次に、ランダム化されたリンクを含めたい任意のページでその部分をレンダリングします。

<%= render 'shared/shuffle' %>

ページ内でこのパーシャルを複数回レンダリングする場合、ランダム モデルはリンクごとに異なることに注意してください。

于 2013-09-07T07:18:18.730 に答える