2010-11-23 5 views
0

レールにはbreak文がありますか?Rails - Breakステートメント?

私はかなり複雑なIF文を持つコントローラを書いています。 Sumで私がしたいのは次のようなものです:

IF!これらの変数はすべて存在し、nilではありませんか? BREAKとBEC何かを継続していないが、エラーメール

ブレークが可能ですを送信 ELSE ELSE

のIF XXX =「の はすべてこのようなものを END

を行うadsasd場合は間違っていましたか?

+0

@Alexレンダリングは戻り値と同じではなく、現在のメソッドを終了しません。 –

答えて

3

すべての変数がいつ利用可能になるのかわかりませんが、コントローラでチェックをしたいときは、通常はbefore_filterコールバックを使用して行います。たとえば:

class YourController 
    before_filter :check_if_variables_exist 

    def show 
    #prepare for render view 
    end 

private 
    def check_if_variables_exist 
    unless @your_variable.nil? 
     #Do what you want 
     render :nothing => true 
    end 
    end 

は、これがないと、要求はYourControllerでアクションショーに来るとき、それは最初のプライベートメソッドcheck_if_variables_existを呼び出すということです。 @your_variableがnilならrender:nothing => trueになり、filter_chainは停止し、アクションショーは決して呼び出されません。しかしyour_variableがnilでなければ、何もせずにメソッドが終了し、コントローラーはいつものようにshowショーを呼び出します。

事前に確認したいことはすべて、別のbefore_filterコールバックに入れることができます。あなたはコントローラ内のすべてのアクションのチェックをしたくない場合は、それは次のように指定することができると:私の意見で

class YourController 
    before_filter :first_check, :only => [:index, :show] 
    before_filter :second_check, :only => [:show, :edit] 

、これはそれを行うには、「レール」方法です。

+0

これはすばらしいクリーンなアイデアです!私は本当にそれが好きです。ありがとうございました – AnApprentice

1

ルビーのreturnステートメントはあなたが探しているものです。しかし...

私はあなたのアプリケーションについて何も知らず文

IFかなり複雑なを持っているコントローラを書いているが、これはBIG赤旗です。コントローラは、複雑な論理の束を持つ場所ではありません。 RESTfulなデザインパターンを使用している場合(そしてそうしない理由はほとんどありません)、コントローラは非常に軽量であり、ほとんどロジックを含んでいないはずです。モデルはビジネスロジックが属する場所です。ロジックを分離し、アプリケーションを簡素化し、テストを容易にします。