我有一个实例变量@user
所以在HTML <%=link_to @user %>
中给出了结果:
{"id"=>2, "restaurant"=>"sea food", "password"=>"123", "name"=>"a", "email"=>"a", "telephone"=>"123", "created_at"=>"2016-10-09T04:00:24.010Z", "updated_at"=>"2016-10-09T04:00:24.010Z"}
我想得到id的值,但是当我写:<%=link_to @user[:id] %>
时,它返回结果:/restaurant/home
,这是我家餐厅控制器内的家庭功能的路线,我可以&# 39;不明白为什么。
这是我的控制者:
class RestaurantController < ApplicationController
def home
@user = session['loginedUser']
end
def login
end
def checkLogin
@user = User.find_by_restaurant(params[:user][:restaurant])
if @user != nil && @user[:password] == params[:user][:password]
session['loginedUser'] = @user
redirect_to :controller=>'restaurant',:action=>'home'
else
session['loginedUser'] = nil
# redirect_to :controller=>'restaurant',:action=>'login'
end
end
def logout
session['loginedUser'] = nil
redirect_to :controller=>'restaurant',:action=>'home'
end
end
有人可以帮忙吗? 非常感谢。
答案 0 :(得分:1)
您不应该在会话对象中保存复杂对象。会话数据默认保存在cookie中,许多浏览器只接受cookie直到4kB。其他问题也存在。
我建议做出这样的改变:
def checkLogin
...
session['loginedUser'] = @user.id
...
end
def home
@user = User.find session['loginedUser']
end
您的链接应该如下所示
<%=link_to id: @user.id %>
。这个解决方案不是真正的Rails之类的。应该有一个合适的帮手。您可以使用rake routes | grep home
检查路线。你会看到像xxx_xxx_home_xxx_restaurant /restaurant/home(.format) restaurant#home
这样的东西。第一部分是帮助名称,您可以添加_path
或_url
。这可能看起来像<%=link_to xxx_xxx_home_xxx_restaurant_path id: @user.id %>