Ruby on rails 从实例变量获取 id
Ruby on rails get id from instance variable
我有一个实例变量@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] %>
它 returns 结果是:/restaurant/home
,这是我的 home 函数内部的路由餐厅管理员,我不明白为什么。
这是我的控制器:
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
有人可以帮忙吗?
非常感谢。
您不应在会话对象中保存复杂的对象。默认情况下,会话数据保存在 cookie 中,许多浏览器只接受 4kB 以内的 cookie。其他问题也存在。
我建议进行此更改:
def checkLogin
...
session['loginedUser'] = @user.id
...
end
def home
@user = User.find session['loginedUser']
end
您的 link 应该如下所示
<%=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 %>
我有一个实例变量@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] %>
它 returns 结果是:/restaurant/home
,这是我的 home 函数内部的路由餐厅管理员,我不明白为什么。
这是我的控制器:
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
有人可以帮忙吗? 非常感谢。
您不应在会话对象中保存复杂的对象。默认情况下,会话数据保存在 cookie 中,许多浏览器只接受 4kB 以内的 cookie。其他问题也存在。
我建议进行此更改:
def checkLogin
...
session['loginedUser'] = @user.id
...
end
def home
@user = User.find session['loginedUser']
end
您的 link 应该如下所示
<%=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 %>