Tag: Ruby on Rails

Rails 3 + error_messages_for wrong number of arguments (2 for 1)

Migrując z tableless na Activemodel i korzystając z ręcznej polonizacji poprzez:

  def self.human_attribute_name(attr)
      HUMANIZED_ATTRIBUTES[attr.to_sym] || super
  end

napotkamy na taki oto błąd, kiedy będziemy chcieli wyświetlić błędy powalidacyjne:

wrong number of arguments (2 for 1)

Nie wiem czemu tak jest, ale wiem jak temu zaradzić ;) Wysyłamy self.human_attribute_name do lamusa.

Zamiast tego, korzystamy z include ActiveModel::Translation dla naszego modelu, po czym jak gdyby nigdy nic, dopinamy Activemodel identycznie jak Activerecord:

  activemodel:
    errors:
      template:
        body: "Wystąpił problem w następujących polach:"
        header:
          one: "Jeden błąd uniemożliwił przesłanie formularza:"
          other: "Następujące błędy uniemożliwiły przesłanie formularza:"
      messages:
        too_long: jest za długi/a (maksymalnie {{count}} znaków)
        too_short: jest za krótki/a (minimum {{count}} znaki/ów)
    attributes:
      dir_creator: *attributes

Rails 3 + Dynamic form + i18n + PL

Kolejnym problemem na jaki natrafilem (nielicząc niezliczonej ilości html_safe ;) ) było to, że error_messages_for nie jest już częścią railsów. Jest pluginem zewnętrznym.

A jako taki, trzeba go zainstalować go poleceniem:

rails plugin install git://github.com/rails/dynamic_form.git

Po tym zabiegu pozostaje nam wykonanie jeszcze jednej zmiany. Z racji tego, że "wyrzucanie" błędów do formularzy, nie jest już domeną tylko activerecord, musimy przenieść "errorsy" z gałęzi ActiveRecord, do niezależnej gałęzi. Tak więc, fragment:

  errors:
    template:
      body: "Wystąpił problem w następujących polach:"
      header:
        one: "Jeden błąd uniemożliwił przesłanie formularza:"
        other: "Następujące błędy uniemożliwiły przesłanie formularza:"

musi być w niezależnej gałęzi pliku jezykowego.

Od tego momentu, wszystko będzie działać jak w Rails2 :)

Edit: Dla pewności (ze względu np. na kompatybilność z różnymi pluginami, radzę pozostawić kopię, w pierwotnej gałęzi (czyli po prostu kopiujemy errors do trzonu języka).

Copyright © 2026 Closer to Code

Theme by Anders NorenUp ↑