DRY控制器代码

时间:2016-10-27 11:54:16

标签: ruby-on-rails yaml

我希望能够在我的rails应用程序中使用全局可访问的符号,以便打印或返回一组易于维护的字符串/句子。我之前听说过使用YAML的一种方法,但是我记不起它的实现细节或它的名称。

我理想地想象它会起作用的一个例子:

控制器

def foo
  if token.expired?
    render json: { message: :token_expiry_message }
  end
end

def bar
  if !user.authenticate
    flash[:notice] = :token_expiry_message
  end
end

Yaml文件

token_expiry_message: "The user token is expired, please re-authenticate"

这样我可以通过从YAML文件中引用它来干掉我的控制器代码并在我的应用程序中使用标准语言集。

2 个答案:

答案 0 :(得分:3)

您可以使用内置的国际化内容轻松完成此操作

http://guides.rubyonrails.org/i18n.html

config/locals/locale.yml中(其中locale是您当前的本地,例如en)..

 en:
     token_expiry_message: "Your token has expired, please get another"

然后你可以只使用t()助手。

  def foo
      if token.expired?
        render json: { message: t(:token_expiry_message) }
      end
    end

    def bar
      if !user.authenticate
        flash[:notice] = "Error: " + t(:token_expiry_message)
      end
    end

具有能够提供错误消息的本地化版本的额外好处。

答案 1 :(得分:0)

是的,您可以使用Settings.yml文件。如果您需要支持多种语言,您还可以深入了解它并使用本地化文件。

在您的Settings.yml中:

token_expiry_message: 'The user token is expired, please re-authenticate'

然后可以通过以下方式将其加载到您的代码中:

def foo
  if token.expired?
    render json: { message: Settings.token_expiry_message }
  end
end

def bar
  if !user.authenticate
    flash[:notice] = "Error: #{Settings.token_expiry_message}"
  end
end