Ruby on rails从实例变量中获取id

时间:2016-10-09 06:35:07

标签: ruby-on-rails ruby instance

我有一个实例变量@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

有人可以帮忙吗? 非常感谢。

1 个答案:

答案 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 %>