我有一组 2 个字段(标题、描述)和一些语言环境(英语、瑞典语)进行翻译。
当您访问该页面时,您只能看到英文设置字段。但是,用户必须能够提供额外的翻译(如果他愿意)。为此,我使用“globalize3”和“batch_translations”(https://github.com/fidel/batch_translations)宝石。
语言选择就像下拉列表一样完成。选择一种语言后,新的字段集应显示在前一组的下方。
问题本身有点像 Ryan 在他的截屏视频中提到的问题:http ://railscasts.com/episodes/197-nested-model-form-part-2
但是,有一个主要区别 - 表格也必须翻译。
起初,我认为一切正常,将表单构建器引用传递给控制器的远程操作不会有任何问题,该操作负责使用选定的语言环境渲染部分并嵌入它。
但是,事实证明不可能通过 object_id 传递引用(垃圾收集器销毁它)。
然后我发现你可以在控制器中实例化 FormBuilder,如下所示:
f = ActionView::Helpers::FormBuilder.new(:name, @object, view_context, {}, nil)
如果我这样做,只有一阶字段有效,如下所示:f.text_field
但是,globalize3 和 batch_translations 使用的是nested_attributes:
<% f.globalize_fields_for locale do |g| %>
g.text_field :title
g.text_area :description
<% end %>
并且由于某种原因(我认为是因为 view_context 不正确),系统抛出了一个错误:
ActionView::Template::Error (undefined method `<<' for nil:NilClass)
这个问题有什么好的解决办法吗?谢谢!