2014-11-04 56 views
2

我有一个模型的关注增加了一个方法“T”允许模型领域的翻译VA国际化:如何参数传递到符号的方法调用

module Translatable 
    extend ActiveSupport::Concern 

    def t(field_name) 
    I18n.t("models.#{self.class.table_name}.#{translation_tag}.#{field_name}") 
    end 

型号:

class Model < ActiveRecord::Base 
    include Translatable 

这工作得很好,几乎无处不用:

@model.t(:name) 

但是我有一个使用此代码的条目映射选择字段:

Model.all.order(name: :asc), :id, :name 

而我想:名称使用可翻译的方法。下面的作品,但我发现了一个缺少参数错误(很清楚为什么):

Model.all.order(name: :asc), :id, :t 

但是这不起作用:

Model.all.order(name: :asc), :id, :t(:name) 

什么是传递变量的方法正确的方法当他们被称为符号?

回答

6

你不能在这种情况下。

要么在模型中创建专用的方法来处理名称布局,要么在选择之前使用map

def i18n_name 
    t(:name) 
end 

select Model.all.order(name: :asc), :id, :i18n_name 

Model.all.map { |p| [ p.t(:name), p.id ] } 

更多信息here

注:我不建议将国际化的翻译在你的模型,它应该在主持人。看看Draper