如何讀取類變量?在我的情況下,我無法從變量中獲得價值。訪問類實例變量
class MediaContentsController < ApplicationController
@randomUsrId = rand(100)
def create
puts @randomUsrId
end
end
如何讀取類變量?在我的情況下,我無法從變量中獲得價值。訪問類實例變量
class MediaContentsController < ApplicationController
@randomUsrId = rand(100)
def create
puts @randomUsrId
end
end
首先,@randomUsrId
指實例變量,而不是一個類變量。你可以通過類的實例訪問它,而不是直接在類上。對於類變量,您應該使用@@randomUsrId
。
實際上您正在尋找的是attr_accessor :randomUsrId
,通過這個,您可以在實例方法上閱讀它,甚至可以通過類的實例進行設置。
方法如下:
class MediaContentsController < ApplicationController
attr_accessor :randomUsrId
@randomUsrId = rand(100)
def create
puts @randomUsrId
end
end
但@randomUsrId = rand(100)
不會將@randomUsrId
隨機數,至少它是不推薦的方式。你應該在這裏使用before_action
。
class MediaContentsController < ApplicationController
attr_accessor :randomUsrId
before_action :set_user_id_to_a_random_number, only: :create
def create
puts @randomUsrId
end
private
def set_user_id_to_a_random_number
@randomUsrId = rand(100)
end
end
編輯:
每次調用set_user_id_to_a_random_number
功能時,它會基於rand(100)
不同的號碼,它裏面存儲@randomUsrId
。如果這是你不想要的東西,你要堅持相同的值,你可以這樣做以下:
def set_user_id_to_a_random_number
@randomUsrId = rand(100) unless defined? @randomUsrId
end
編輯:
我只爲一個請求規定的作品,如果你有多個請求,它不會工作。作爲瑞安貝茨說:here:
一個實例變量只有堅持圍繞單個請求,所以使用上述只會有利於你的技術,如果你需要多次調用的方法每個請求。
如果您想要在多個請求之間存儲某些內容,那麼會留下兩個選項。您可以使用數據庫,也可以使用名爲memcached的東西。
你可能做錯事在你的代碼,因爲這是不如何Rails的控制器邏輯應經常執行,但讓我們坐下來你的問題呢。正如我前面提到它是不是類變量,它在類範圍的實例變量,所以爲了訪問它,你應該首先從範圍得到它:
class MediaContentsController
@randomUsrId = rand(100)
def create
puts self.class.get_random_usr_id
end
def self.get_random_usr_id
@randomUsrId
end
end
MediaContentsController.new.create
# => 44
何時以及如何運行'@randomUsrId = rand(100)',以及在什麼情況下運行? –
@ArslanAli _when和how?在解釋過程中,與任何其他代碼指令一樣。 _在類上下文中的什麼上下文(這就是爲什麼這個變量可以被任何類方法訪問)。您可以將此代碼複製粘貼到您的計算機並多次運行。 –
明白了,謝謝! –
爲什麼你想要一個控制器中的類變量?你到底想要做什麼? – Surya
這不是類變量。它實際上是類範圍中的實例變量。 –