1

私はブートストラップとレールを使用しており、ユーザーモデルと投稿モデルを持っています..ユーザーは投稿(コレクション)を作成します..

ナビゲーションバーのブートストラップを使用して、ユーザーが投稿の名前を表示するドロップダウンをクリックできるようにしたい..プライベートメソッドとbefore_actionを使用して1つのコントローラーでこれを行いましたが、すべてに対してこれを行いたくありませんコントローラーであり、アプリケーションコントローラーでは機能しませんでした...

これを行うより良い方法はありますか??

私はこれをやっていた

def list
  @user = User.find_by_username(params[:id])
  @collections = @user.collections
end

そして

before_action :list 

コントローラーの上部に

これを達成するための最もセマンティックな方法は何ですか??

4

2 に答える 2

2

両方をアプリケーション コントローラーに移動できれば、どのコントローラーでも使用できるようになります。より一般的には、これが問題を解決するための最良のアプローチであるかどうかはわかりません。

これらのヒントも役立つ場合があります。

  1. デバイスを使用していますか?それとも他の認証プラグインですか?もしそうなら、あなたはおそらくcurrent_userヘルパーを持っているでしょう。これにより、簡単に行うことができます@collections = current_user.collections
  2. 可能な限り、アクションとパラメーターにはよりわかりやすい名前を使用することをお勧めします。 def fetch_list_collectionsまたは、という名前のパラメーターを渡す代わりにid、おそらくあなたのパラメーターはという名前にする必要がありますusername。これらの命名規則は、あなたのコードを見る可能性のある他の人にとっても、N か月前に書いたものを思い出そうとするあなた自身にとっても、非常に重要になります。
  3. リスト アクションは N+1 クエリを生成しています。つまり、一度だけ実行する必要があるときに、データベースに複数回アクセスしていることを意味します。これについてはレールガイドを参照してください。これを回避する方法を検討することもできます。Devise はかなりよく文書化されており、wiki でこれについて議論しているものがあるに違いありません。
  4. このアクションを呼び出すときに、少なくとも更新アクションへの投稿リクエストを制限することを検討することをお勧めします。彼らがログインする前はどうですか?current_user である可能性があり、 でメソッドnilを呼び出そうとするとエラーが発生します。collectionsnil

時間をかけてこのことを学びましょう。一気に習得する必要はありませんが、上記が参考になるかと思います。

于 2013-10-15T03:35:52.927 に答える
0

アプリケーションコントローラーでこれを使用するようにしました

before_action :list

private

  def list
    @collections = current_user.collections
  end

ありがとう @arieljuod

于 2013-10-15T03:28:51.763 に答える