5

わかりましたので、私が使用しているアプリケーションのこの方法があり、本番環境で動作します。私の質問はなぜこれが機能するのですか? これは新しい Ruby 構文ですか?

def edit
  load_elements(current_user) unless current_user.role?(:admin)

  respond_to do |format|
    format.json { render :json => @user }   
    format.xml  { render :xml => @user }
    format.html
  end

rescue ActiveRecord::RecordNotFound
  respond_to_not_found(:json, :xml, :html)
end
4

4 に答える 4

13

rescues は、メソッド内にあるときに明示的に関連付ける必要はありませんbegin。これは、構文が定義されている方法です。例については、#19 herethis SO question、および上記の dupeを参照してください。

于 2012-04-10T13:06:31.290 に答える
2

レスキューは単独で作業できます。begin と end は常に必要ありません。

1 行の形式で Rescue を使用して、行の他のことがうまくいかないときに値を返すことができます。

h = { :age => 10 }
h[:name].downcase                         # ERROR
h[:name].downcase rescue "No name"  
于 2012-04-10T13:11:49.403 に答える
0

rescueword はメソッド定義の一部です

しかし、コントローラーでは、エラーをレスキューする方が良いrescue_from

于 2012-04-10T12:57:22.847 に答える
-3

これを試して

def edit
  begin
    load_elements(current_user) unless current_user.role?(:admin)

    respond_to do |format|
      format.json { render :json => @user }   
      format.xml  { render :xml => @user }
      format.html
    end

  rescue ActiveRecord::RecordNotFound
    respond_to_not_found(:json, :xml, :html)
  end
end
于 2012-04-10T13:01:30.757 に答える