if params[:type] = "Type A"
# do something
end
if params[:type] = "Type B"
# do something
end
但我認爲這是錯誤的。我應該使用==
然而,讓我錯誤:
你無對象時,你沒想到吧
什麼是軌道要做到這一點的最好方法是什麼?
所有我做是根據它的值從一表格中獲得一個單選按鈕變量和做邏輯(無論是A型或B型)
if params[:type] = "Type A"
# do something
end
if params[:type] = "Type B"
# do something
end
但我認爲這是錯誤的。我應該使用==
然而,讓我錯誤:
你無對象時,你沒想到吧
什麼是軌道要做到這一點的最好方法是什麼?
所有我做是根據它的值從一表格中獲得一個單選按鈕變量和做邏輯(無論是A型或B型)
class Hash
def try(arg)
self[arg] rescue nil
end
end
if params.try(:type) == "Type A"
# do
elsif params.try(:type) == "Type B"
# do
end
case params.try(:type)
when "Type A"
# do
when "Type B"
# do
else
# default do
end
對於'#try' +1,我忘了它 – MBO 2010-01-21 23:29:46
對象#嘗試在實例上工作的ActiveRecord模型,因爲它們都爲它們所表示的關係的行中的每個字段提供*方法*。但是它不能用於散列,因爲您必須使用散列#[] /散列#獲取來訪問散列內容。 – Caffeine 2010-01-21 23:43:52
解決方案不會拋出異常,因爲'params'確實有'type'方法,其中HashWithdifferentAccess/Hash繼承自Object:它是Object#類的一個不推薦的別名。 請參閱http://ruby-doc.org/core/classes/Object.html#M000349 – Caffeine 2010-01-21 23:55:35
你確定它應該是params[:type]
?首先,在訪問控制器中的操作之前,檢查日誌以查看params內部的內容。
要檢查多個選擇,你可以使用switch結構:
case params[:type]
when "Type A"
# do sth
when "Type B"
# do sth
else # not A nor B, can be nil
# do nothing
end
如果你需要更深層次的內部PARAMS那麼你可以的if/else使用:
if params[:type] && params[:type][:value] == "sth"
# do sth
elsif params[:type] && params[:type][:value] == "..."
# do sth
end
並檢查你在何處獲得錯誤來自,因爲在Ruby中,您可以輕鬆地比較nil和String,所以這不是因爲在您的示例中使用==
。
除非你在這段代碼之前用'params' *做一些奇怪的事情,'nil object'錯誤肯定不是來自比較。它來自第二個區塊發生的情況或兩個區塊都沒有運行的事實。 (當你使用'='時,第一個'if'將總是計算爲'true',所以第一個塊總是被評估。) – 2010-01-22 13:09:14