1

コントローラー アクションの 1 つでユーザーを検索しています。params[:user_id] が nil になることもあり、その場合、検索で current_user が返されます。次の 2 つの検索方法では、同じ結果が得られるようです

@user = User.find(params[:user_id]||=current_user)

@user = User.where('id = ?', params[:user_id]).first || current_user

質問は次のとおりです。

1) より適切な検索方法はどれですか? 2) params[:user_id] が nil の場合、検索をすべてバイパスする方法はありますか?

行 2 を達成するために if/else ステートメントを思いつくことができると確信していますが、それはハックだと感じています。でも、そうじゃないかも?

ありがとう!

4

2 に答える 2

4

これは、三項演算子に最適な場所です

@user = params[:user_id] ? User.find(params[:user_id]) : current_user

もう少し追加したいと思います。

I'm sure I could come up with a if/else statement to accomplish line 2 but that
feels hackish to me. But, maybe it's not?

多くの開発者は、より読みやすい制御フローではなく、洗練されたワンライナーでかわいくするのが大好きです。私もやります!if/else

コードを書くときは、簡潔なワンライナーよりも読みやすさの方がはるかに重要であることを忘れないでください。そうは言っても、あなたの特定の例は三項演算子を使用するのに最適な場所ですが、代替手段if/elseも同様に受け入れられます。Ruby では、他のいくつかの言語よりも少しクールにすることさえできます。

@user = if params[:user_id]
  User.find(params[:user_id])
else
  current_user
end
于 2013-03-13T13:36:57.343 に答える
1

これでどこに行くのかわかりませんが、私にとって最初のものはよりRailsっぽいものです。

あなたは必要ありません=

@user = User.find(params[:user_id]||current_user)
于 2013-03-13T13:35:29.457 に答える