如何将参数传递给符号方法调用

时间:2014-11-04 17:07:02

标签: ruby-on-rails ruby ruby-on-rails-4

我有一个模型关注点,它增加了一种方法' t'允许模型字段翻译为I18n:

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)

但是我有一个select字段,它使用此代码映射条目:

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

我想要:使用可翻译方法的名称。以下工作,但我得到一个缺少参数错误(很明显为什么):

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

然而,这不起作用:

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

将变量称为符号时,将变量传递给方法的正确方法是什么?

1 个答案:

答案 0 :(得分: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

注意:我不建议在您的模型中放置i18n翻译,它应该在演示者中。看看Draper