簡體   English   中英

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] %>它返回給我的結果是/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中,並且許多瀏覽器僅接受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檢查rake routes | grep home 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 %>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM