使用I18n和Rails时,记录以俄语而不是英语保存

时间:2016-02-17 11:43:19

标签: ruby-on-rails rails-i18n

我对ROR很新,我现在正在尝试I18n。我有一个付款选项的下拉列表以及用户订购某些东西的其他详细信息。此外,我有一个静态数组,用户可以从中选择,在模型

中定义
PAY_MODE = [:cheque, :credit_card, :purchase_order]

我的语言环境文件是

order:
 back_to_product: "назад"
 sent_email: "Поздравления. Ваш заказ был успешным размещены ."
 PAY_MODE:
    cheque: "чек об оплате"
    credit_card: "Кредитная карта"
    purchase_order: "Заказ на покупку"
    select_prompt: "Выберите режим оплаты"

一切都很完美,但是在将数据保存到数据库中时,我会收到错误

未定义的方法`翻译缺失:en.cheque'为#Order:0x007fc0e00fc898>

控制器看起来像

def create
    @order = Order.new(order_params)
    @order.add_line_items_from_cart(@cart)
    respond_to do |format|
      if @order.save
        Cart.destroy(session[:cart_id])
        session[:cart_id] = nil
        OrderNotifier.received(@order).deliver
        format.html { redirect_to store_index_path, notice: t('order.sent_email') }
        format.json { render action: 'show', status: :created, location: @order }
      else
        format.html { render action: 'new' }
        format.json { render json: @order.errors, status: :unprocessable_entity }
      end
    end
  end

private

def order_params
      params.require(:order).permit(:name, :address, :email, :pay_type)
    end

我正在通过

显示选项
<%= f.select :pay_type, t(Order::PAY_MODE, scope: 'order.PAY_MODE'),prompt: t('order.PAY_MODE.select_prompt') %>

我知道,我将不得不搜索相应的英文翻译但我该怎么做。它在en.cheque中搜索它而不是en.order.PAY_MODE

感谢任何帮助。提前完成。

更新

所以,我解决了我最初的问题。显然,在模型中,我没有以适当的格式编写验证。应该是

PAY_MODE = [:cheque, :credit_card, :purchase_order]
validates :pay_type, :inclusion => { :in => I18n.t(PAY_MODE, scope: 'order.PAY_MODE'), :message => "is not a valid" }

现在记录已保存到数据库中。但是,现在的问题是它用Russain语言保存,而不是英语。我怎么做才能把它保存到英语?

1 个答案:

答案 0 :(得分:0)

我看到你使用t(Order :: PAY_MODE,范围:'order.PAY_MODE')并不好。 t方法中的Scope选项不能与数组一起使用。让我们看看http://guides.rubyonrails.org/i18n.html(4.1部分) 你可以这样写:

f.select :pay_type, t('order.PAY_MODE').to_h, prompt:....