我试图通过传递参数来渲染show动作,但是当没有用户登录时,没有渲染显示页面。这是我的控制器:
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以及设计3.0.0。用户模型不是由设计生成的。
请帮助。
修改 这是触发show动作的链接:
http://localhost:3000/qr_codes/9M9JZLiemrNdS_g90mZ14w
答案 0 :(得分:1)
由于@user在打印时等于#,因此显然不等于nil且重定向不会发生。您需要更改find_by_qr中的代码以在未找到时返回nil,或者确定该方法用于表示未找到的其他方式,并更改条件以使用它。
答案 1 :(得分:-1)
请改为尝试:
@user = User.find_by_qr(params[:id])
if @user
respond_to do |format|
format.html
end
else
redirect_to root_path
end