1

私のプログラムでは、次のように製品IDを使用して製品情報を取得する必要があります。

# Show the product info.
def show
    @product = Product.find params[:id]

    if !@product
        redirect_to products_path, :alert => 'Product not found!.'
    end
end

製品が存在しない場合、Railsエラーが発生しました。id=xxxの製品が見つかりませんでした。このエラーメッセージを上書きして、自分でエラーをフラッシュアラートとして表示したいと思います。

どうやってやるの?前もって感謝します。

4

4 に答える 4

4

例外の代わりに製品が見つからない場合は、Product.try(:find, params[:id])またはを記述してnilを取得できますProduct.find_by_id params[:id]

于 2012-08-15T10:52:47.950 に答える
1

findメソッドは常にResourceNotFoundを発生させます。このアクションに対してのみカスタムエラーメッセージが必要な場合は、次のように実行できます。

def show
    @product = Product.find_by_id params[:id]

    if @product.blank?
        redirect_to products_path, :alert => 'Product not found!.'
    end
end 
于 2012-08-15T10:55:32.230 に答える
1
def show
    begin
      @product = Product.find params[:id]
    rescue ActiveRecord::RecordNotFound => e
      redirect_to products_path, :alert => 'Product not found!.'
    end
end

常に特定の例外を救済するようにしてください。これにより、望ましい結果が得られます。@Emrahが述べたように、指定されたIDのレコードがない場合、findメソッドが発生します。ActiveRecord::RecordNotFound

于 2012-08-15T11:05:33.997 に答える
0

このfindメソッドは、何も見つからなかった場合にエラーを発生させるように指定されています。ARelスタイルを使用できます

@product = Product.where(:id => params[:id]).first

代わりにnil、空の結果が返されます。

于 2012-08-15T10:58:48.417 に答える