0

パラメータを渡してショー アクションをレンダリングしようとしていますが、サインインしているユーザーがいない場合、ショー ページがレンダリングされません。これが私のコントローラーです。

class QrCodesController < ApplicationController

  def show
    @user = User.find_by_qr(params[:id])
    if @user.nil?
        redirect_to root_path
    end
  end
end

これが私の見解です:

This is the qr-code page of <%= @user.fname %> <%= @user.lname%>

ただし、ユーザーがサインインしている場合、表示ページは完全にレンダリングされます。

Rails サーバーは、完全にレンダリングされた show アクションも示しています。

Started GET "/qr_codes/9M9JZLiemrNdS_g90mZ14w" for 127.0.0.1 at 2013-08-02 18:29:55 +0545
Processing by QrCodesController#show as HTML
  Parameters: {"id"=>"9M9JZLiemrNdS_g90mZ14w"}
  User Load (0.3ms)  SELECT "users".* FROM "users" WHERE "users"."qr" = '9M9JZLiemrNdS_g90mZ14w' LIMIT 1
  Rendered qr_codes/show.html.erb within layouts/application (0.7ms)
  Rendered layouts/_shim.html.erb (0.0ms)
  Web Load (0.3ms)  SELECT "webs".* FROM "webs" WHERE "webs"."id" = 2 LIMIT 1
  Rendered layouts/_header.html.erb (3.2ms)
  Rendered layouts/_footer.html.erb (0.0ms)
Completed 200 OK in 54ms (Views: 52.4ms | ActiveRecord: 0.5ms)

Rails 3.2.13、ruby 1.9.3p429、devise 3.0.0 を使用しています。User モデルはデバイスによって生成されませんでした。

助けてください。

編集: これは、表示アクションをトリガーするリンクです。

http://localhost:3000/qr_codes/9M9JZLiemrNdS_g90mZ14w
4

2 に答える 2

1

出力すると @user は # と等しいため、明らかに nil と等しくなく、リダイレクトは行われません。見つからない場合に nil を返すように find_by_qr のコードを変更するか、そのメソッドが見つからないことを表すために使用している他の方法を特定し、それを使用するように条件を変更する必要があります。

于 2013-08-02T14:50:32.060 に答える
-1

代わりにこれを試してください:

@user = User.find_by_qr(params[:id])
if  @user
  respond_to do |format|
    format.html 
  end
else
  redirect_to root_path
end
于 2013-08-02T13:15:16.553 に答える