1

ユーザーがいくつかの技術を研究し、それに対する報酬を得ることができる状況があります。現在、これらの報酬は、いくつかのアイテムを作成したり、生産ブーストを取得したりできるようなものです.

私が現在行っているのは、コントローラーでフラッシュ メッセージとリダイレクトを処理することです。では、アイテムを作成するために特定の技術を研究しなければならない場合を想像してみてください。私のコントローラーは次のようになります:

def create

    flash[:error] = I18n.t('error.not_researched') and redirect_to research_url and return if not current_user.has_research?(research)
    ....
    ....
end 

もちろん、これはうまく機能しますが、それが最善の方法であるかどうかはわかりません。before_create フィルターを使用してそれを行うことを考えましたが、この方法ではフラッシュメッセージを実際に設定することはできず、ほとんど範囲外です。

したがって、コードが可能な限り DRY であり、適切に記述されるように、ベスト プラクティスの観点からどのように対処するかをお聞きしたいと思います。

4

1 に答える 1

1

実際、問題はフラッシュメッセージの設定ではありません。これを行うには、モデルで検証を行い、それがコントローラーに保存されているかどうかを確認します。

unless research.save
  flash[:error] = I18n.t('error.not_researched')
  redirect_to research_url
  return
end

あなたの場合の問題は、にアクセスする必要があることですcurrent_user。これは、コントローラーがこのチェックを行うのに適切な場所であることを示しています。

スタイルに関する補足:そのチェックを数行に分割すると、コードがより明確になると思います。

unless current_user.has_research?(research)
  flash[:error] = I18n.t('error.not_researched')
  redirect_to research_url
  return
end
于 2012-04-05T12:27:26.747 に答える