chce zmienić plik vendor/rails/actionpack/lib/action_view/helpers/active_record_helper.rb
tak aby dopasować dla siebie wyświetlanie informacji o błedach walidacji. Jednak w mojej aplikacji nie ma takiego pliku!
W katalogu vendors jest tylko pusty folder plugin
[quote=br-design.pl]chce zmienić plik vendor/rails/actionpack/lib/action_view/helpers/active_record_helper.rb
tak aby dopasować dla siebie wyświetlanie informacji o błedach walidacji.[/quote]
Ale po co strzelać z armat do komarów? Przejrzyj dokumentację walidatorów i listę parametrów. Znajdziesz coś takiego jak message. (Przykład z API)
class Person < ActiveRecord::Base
validates_length_of :first_name, :maximum=>30
validates_length_of :last_name, :maximum=>30, :message=>"less than %d if you don't mind"
validates_length_of :fax, :in => 7..32, :allow_nil => true
validates_length_of :user_name, :within => 6..20, :too_long => "pick a shorter name", :too_short => "pick a longer name"
validates_length_of :fav_bra_size, :minimum=>1, :too_short=>"please enter at least %d character"
validates_length_of :smurf_leader, :is=>4, :message=>"papa is spelled with %d characters... don't play me."
end
Niestety, kiedy skopiuje ten plik do scieżki odpowiedniej to serwer przy starcie wypluwa mi coś takiego:
./script/…/config/boot.rb:16:in require': No such file to load -- script/../config/../vendor/rails/railties/lib/initializer (LoadError) from ./script/../config/boot.rb:16 from script/server:2:inrequire’
from script/server:2
Po usunięciu pliki (i całej struktury) wszystko jest OK.
Ja osobiście nie lubię podmieniać plików z vendor/rails, bo później przy ewentualnej aktualizacji trzeba pamiętać o zmianach.
Najłatwiej skorzystać z otwartych klas w rubim. Czyli tworzysz sobie w katalogu lib plik, w którym podmieniasz metody, które chcesz zmodyfikować na własne i później dajesz require ‘plik’ w application.rb na przykład (albo jak potrzebujesz tego tylko w jednym kontrolerze, to właśnie w nim).
[quote=Marcin][quote=br-design.pl]chce zmienić plik vendor/rails/actionpack/lib/action_view/helpers/active_record_helper.rb
tak aby dopasować dla siebie wyświetlanie informacji o błedach walidacji.[/quote]
Ale po co strzelać z armat do komarów? Przejrzyj dokumentację walidatorów i listę parametrów. Znajdziesz coś takiego jak message. (Przykład z API)[/quote]
DRY ?
A to co chce zrobic autor, mozna wykonac poprzez plugin.
szybki tutorial (pisany z pamieci):
./script/generate plugin new_errors
w
vendor/plugins/new_errors/lib/new_errors.rb
module ActiveRecord
class Errors
@@default_error_messages.update({
:not_a_number => "- pole nie jest liczbą",
:blank => "- pole nie moze byc puste"
# tu reszta pol z @@default_error_messages
})
end
end
module ActionView #nodoc
module Helpers
module ActiveRecordHelper
def error_messages_for(object_name, options = {})
options = options.symbolize_keys
object = instance_variable_get("@#{object_name}")
unless object.errors.empty?
content_tag("div",
content_tag(
options[:header_tag] || "h2",
"Wystąpił błąd podczas przetwarzania Twojego żądania"
) +
content_tag("p", "Wystąpiły następujące błędy:") +
content_tag("ul", object.errors.full_messages.collect { |msg| content_tag("li", msg) }),
"id" => options[:id] || "errorExplanation", "class" => options[:class] || "errorExplanation"
)
end
end
end
end
end
To ile razy Ty definiujesz model X w ramach jednej aplikacji? Ja jestem takim dziwnym gościem, który daną klasę definuje raz i w jednym miejscu… Wybaczcie, wiem, trochę to WET.
[code]A to co chce zrobic autor, mozna wykonac poprzez plugin.
szybki tutorial (pisany z pamieci):
./script/generate plugin new_errors
w
vendor/plugins/new_errors/lib/new_errors.rb[/code]
Oho, nie doszedłem jeszcze do pluginów Ale widocznie można. to dobre rozwiązanie?
No tak, ale czasami chcesz napisać Hasło nie może być puste, a czasami Proszę o uzupełnienie hasła. To daje Ci taką możliwość. Osobiście uważam, że jest to wygodne, daje swobodę językową, odmiany, końcówki, zwłaszcza przy języku polskim jest to istotne. A mimo wszystko pozostaje w duchu DRY.
Pobawiłem się z tym pluginem i mam nie mały problem, czy on przypadkiem nie zmienia zasad odmieniania nazw modeli z liczby pojedyńczej na mnogą?
Otóż zrobiłem sobie zwykły test, wgrałem plugina stwrozylem model “Subpage”, dodałem funkcje scaffold :subpage w kontrolerze CMS, i dodając nowy wpis, dostaję taki error:
[code] Showing app/views/cms/_form.rhtml where line #11 raised: