插入可变轨道

时间:2017-06-15 07:34:12

标签: ruby-on-rails ruby interpolation

我正在尝试根据网址传递的参数使我的页面动态化。我想用params来改变像这样的变量

<h3><%= "$subproject_title_#{params[:num]}_1" %></h3>

显然,这只是打印字符串,但如果删除引号,则只有一半的行被注释掉。 这样做的正确方法是什么?

2 个答案:

答案 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")