我試圖使我的頁面動態,基於URL傳遞的參數。我想用PARAMS改變變量這樣在可變軌道插值
<h3><%= "$subproject_title_#{params[:num]}_1" %></h3>
顯然,這只是打印字符串,但如果我刪除引號,一半的線剛剛被註釋掉。 這樣做的正確方法是什麼?
我試圖使我的頁面動態,基於URL傳遞的參數。我想用PARAMS改變變量這樣在可變軌道插值
<h3><%= "$subproject_title_#{params[:num]}_1" %></h3>
顯然,這只是打印字符串,但如果我刪除引號,一半的線剛剛被註釋掉。 這樣做的正確方法是什麼?
eval("$subproject_title_#{params[:num]}_1")
'eval'是一個非常強大的工具。除非你真的知道你在做什麼,你應該避免它。該特定的代碼易受代碼注入的影響。例如,將':num'設置爲''「; _1 ='ls';」''會讓你的視圖打印一個目錄列表。 – Stefan
一些經驗法則:
eval
此外,嘗試爲避免在您的視圖中訪問params
,應該在控制器中進行處理。
除了全局變量,您可以使用實例變量。它們在你的控制器和你的視圖之間共享。
而是動態生成的變量,你可以使用一個哈希:
@titles = {
'1' = 'title one',
'2' = 'title two',
'3' = 'title three',
}
然後,而不是eval
,您可以使用Hash#fetch
爲給定num
取一個值。
您可以在值賦給一個實例變量在你的控制器:
def index
@title = @titles.fetch(params[:num], 'default title')
end
該實例變量就可以在你訪問查看:
<h3><%= @title %></h3>
您還可以創建一個Page
模型與title
和(唯一)num
屬性存儲您的頁面詳細信息。到控制器的變化將是相當簡單:
def index
@page = Page.find_by(num: params[:num])
end
而在你的看法:
<h3><%= @page.title %></h3>
'public_send( 「$ subproject_title _#{PARAMS [:NUM]} _ 1」)' –
@AndreyDeineko那給我一個未定義的方法錯誤。 – JustusP
你可以使用'實例變量'而不是全局嗎? –