我正在尝试根据网址传递的参数使我的页面动态化。我想用params来改变像这样的变量
<h3><%= "$subproject_title_#{params[:num]}_1" %></h3>
显然,这只是打印字符串,但如果删除引号,则只有一半的行被注释掉。 这样做的正确方法是什么?
答案 0 :(得分:3)
一些经验法则:
eval
此外,尽量避免在视图中访问应该在控制器中处理的params
。
您可以使用实例变量代替全局变量。它们在您的控制器和您的视图之间共享。
您可以使用哈希:
,而不是动态生成的变量@titles = {
'1' = 'title one',
'2' = 'title two',
'3' = 'title three',
}
然后,您可以使用Hash#fetch
来获取给定eval
的值,而不是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>
答案 1 :(得分:-2)
eval("$subproject_title_#{params[:num]}_1")