rails-i18n ошибка date_select

На мой взгляд, у меня есть:

<%= f.date_select :start %>

и я получаю сообщение об ошибке: can't convert Symbol into String

Я знаю, что это связано с правилом it.date.order, но вижу, что rails-i18n включает его: https://github.com/svenfuchs/rails-i18n/blob/master/rails/locale/it.yml#L51

что здесь не так?

полная обратная трассировка: https://gist.github.com/4007557

РЕДАКТИРОВАТЬ: запуск I18n.t 'date.order' в консоли дает мне => [:day, :month, :year]. Что это правильно... так почему date_select не работает?

проблема в репозитории GitHub: https://github.com/svenfuchs/rails-i18n/issues/ 273


person enricostn    schedule 04.11.2012    source источник


Ответы (5)


У меня была похожая, если не такая же проблема в прошлом. В то время я исправил это, используя следующее:

date:
  order: [ !ruby/symbol day, !ruby/symbol month, !ruby/symbol year ]
person vise    schedule 04.11.2012
comment
У него проблема с I18n метки поля формы, а не с I18n формата даты. - person NobbZ; 04.11.2012
comment
Я уже просмотрел след. Я бы не опубликовал, если бы искренне не думал, что это решит проблему с плакатами. - person vise; 05.11.2012
comment
спасибо @vise, это должно решить проблему, но не объясняет, почему date_select не работает. - person enricostn; 05.11.2012
comment
Отлично решил мою проблему. Спасибо. Кто-нибудь может объяснить, что означает эта строка? - person Ricardo Acras; 03.06.2013

Насколько я понимаю документы по рельсам о date_select, он хочет иметь строку.

Если :start — это имя вашего I18n, вам следует сделать <%= f.date_select t(:start) %>, насколько я помню.

person NobbZ    schedule 04.11.2012
comment
Конечно верно из того, что я тоже помню. - person Jordon Bedwell; 04.11.2012
comment
в моем config/locales/it.yml у меня есть activerecord: attributes: project: start: Inizio stop: Fine и с помощью t(:start) я получаю undefined method <span class="translation_missing" title="translation missing: it.start">Start</span>' for #<Project:0x000000038662f0> - person enricostn; 04.11.2012
comment
и если использовать t(activerecord.attributes.project.start) я получаю undefined method 'Inizio' for Project - person enricostn; 04.11.2012
comment
Тогда вам следует ознакомиться с guides.rubyonrails.org/i18n.html#looking. -up-translations и вместо этого используйте t("activerecord.attributes.project.start"). Или используйте t(:start, :scope => [:activerecord, :attributes, :project]) - person NobbZ; 04.11.2012
comment
извините, это опечатка. Я использовал t('activerecord.attributes.project.start'). Вы могли видеть, что приложение прочитало Inizio, что это правильно, но я думаю, что date_select нужно имя атрибута (метода) :start api.rubyonrails.org/classes/ActionView/Helpers/ - person enricostn; 05.11.2012
comment
Взгляните на примеры, там ни разу не использовался символ! Все примеры со строками, ваше сообщение об ошибке говорит то же самое, вам нужна строка! Используйте один! И я думаю, что теперь я впервые понял, что означает method, попробуйте "start", если поле даты в вашей модели равно #start… Я обновлю ответ, когда вы скажете, работает ли он. - person NobbZ; 05.11.2012

Вам не нужно трогать форму: это проблема перевода. Вы должны добавить в свой файл it.yml строки, которые вы найдете здесь: https://github.com/svenfuchs/rails-i18n/blob/master/rails/locale.

person Fabien Lebas    schedule 19.03.2013
comment
Хотя, вероятно, лучше использовать весь гем rails-i18n. - person Sebastian; 09.04.2013

Если, как в моем случае, вы работаете только с годами и не хотите добавлять переводы для каждого языка с i18n только для выбора года, вы можете добавить :locale => 'en' только для этого дата такая:

<%= f.date_select :start, :start_year => 1940, :end_year => Date.today.year, :discard_day => true, :discard_month => true, :locale => 'en' %>
person Hugo    schedule 30.09.2013

Это проблема перевода: вам нужно добавить правило :order в файл it.yml или использовать эту строку в форме.

<%= f.date_select(:start, :order => [:day, :month, :year]) %>
person swilgosz    schedule 25.06.2014