redirect_toを使用した後にコントローラーの実行を停止するにはどうすればよいですか? (Railsを使用)

StackOverflow https://stackoverflow.com/questions/820781

  •  03-07-2019
  •  | 
  •  

質問

:yearおよび:monthとして複数のアクションを実行するコントローラーがあります URLの属性。私はプライベートメソッドcheck_dateを作成しました 日付が有効であり、日付が将来ではないことを確認してください。

def check_date(year, month)
  if month < 1 || month > 12 || year < 2000
    flash[:notice] = I18n.t 'archive.invalid_date'
    redirect_to :action => 'index'
  elsif year > Date.today.year || (year == Date.today.year && month > Date.today.month)
    flash[:notice] = I18n.t 'archive.no_future'
    redirect_to :action => 'month_index', 
      :year => Date.today.year, 
      :month => Date.today.month,
      :type => params[:type]
  end
end

コントローラの実行を終了するレールの方法はありますか? redirect_to?

私が考えることができる方法は、redirect_toの後に例外をスローするか、check_dateから値を返し、それを呼び出す各アクションでチェックすることです。

def month_index 
  year = params[:year].to_i
  month = params[:month].to_i
  if !check_date(year, month)
    return
  ...
end

しかし、これを行うための素晴らしいレールの方法があるのだろうか。私は半分でした redirect_to railsを呼び出したことで、 停止しますが、それは起こらないようです。

役に立ちましたか?

解決

おそらくフィルターを使用します。

コントローラーで before_filter として check_date を呼び出すと、レンダリングまたはリダイレクトされたという事実により、コントローラーがアクションメソッドを呼び出すことができなくなります。それで終わります。

他のヒント

次のこともできます。

return redirect_to :action => 'index'

and

return redirect_to :action => 'month_index', 
  :year => Date.today.year, 
  :month => Date.today.month,
  :type => params[:type]

改行(IMHO)を返すよりも見栄えが良いため。

投入できます

return false

アクションのコード実行を停止したい場所

redirect_toは、終了時に何をレンダリングするかをRailsに指示するだけです。実際に必要なものの後に他のrenderまたはredirect_toディレクティブを追加するとRailsが混乱するので、redirect_toの後にコントローラーから戻るだけです-これは「通常の」Railsのやり方です。

OPは redirect_to の機能について混乱していると思います。

redirect_to は、アクションの最後にリダイレクトします。ただし、残りのコントローラー機能は通常どおり実行されます。 (他の人が投稿したように)あなたがしなければならないのは、他の関数呼び出しと同じように、リターンを含めることです。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top