何时将代码放在application_controller.rb中

时间:2011-02-21 10:23:51

标签: ruby-on-rails ruby ruby-on-rails-3

我一直在使用Rails创建我的第一个网站几个星期,不断获取新的信息,每天都爱它。这个网站对我帮助很大,谢谢。

在尝试设置我的META标签时遇到了一个场景,普遍使用一个(全局)功能,试图让它干嘛!

以下是好的还是坏的做法?我是否忽视了一些我本可以做的事情?

现在,以下是一个梦想,对我来说似乎很合乎逻辑,但这是不好的做法吗?

在application_controller.rb中:

def make_meta_title name

  title = name

  if [params[:page]]
    title << " page " + params[:page]
  end

  title << " | My Site Name"

end

在我的products_controller.rb

def show
  ...
  @meta_title = make_meta_title(@products.name)
end

然后在我看来

<title><%= @meta_title %></title>

输出

Blue widget | My Site Name

Blue widget page 2 | My Site Name

P.S。请不要评论我的语法,这是来自记忆,因为我现在正在另一台计算机上,但它是这样的!

2 个答案:

答案 0 :(得分:4)

application_controller.rb应包含与应用程序中所有其他控制器共享的内容...有几个典型的用例(如某些共享过滤器 - 例如身份验证)

现在在这种特定情况下,你可以使用控制器中的一些东西和辅助方法的组合。控制器将存储您要添加到页面的META,帮助程序将为这些生成标记...然后您将在layouts / application.html.erb(或您使用的任何模板引擎)中添加该标记。 ..

答案 1 :(得分:1)

IMO将文字文本" page "" | My Site Name"放在您呈现数据的方式中,因此应该成为视图的一部分。如果您网站的每个页面都遵循此方案,我会将其移至您的全局布局页面。

另一方面,如果您有时在不使用@meta_title的情况下创建make_meta_title,那么您所做的事情对我来说似乎是合理的。