Walidacja

Witam,

mam problem z walidacją. Otóż mam jeden model video do którego załączam załącznik w postaci zdjęcia (plugin paperclip - tylko jedno zdjęcie) i nie wiem jak wyświetlać w tym modelu walidacje typu:

validates_attachment_presence :photo validates_attachment_size :photo, :less_than=>1.megabyte
Wyświetlają mi się tylko walidacje modelu video.

ale walidacja działa (rekord się nie zapisuje) i jest tylko problem z wypisaniem errorów walidacji?

Rekord się zapisuje czyli walidacja nie działa.

Lepiej napisze kod:

Model Video:

has_one :photo, :dependent = > destroy, :validate => true

Model Photo:

belongs_to :video has_attached_file :photo, :styles => { :large => "640x480", :medium => "300x300>", :thumb => "100x100>" } #Validations validates_attachment_presence :photo validates_attachment_size :photo, :less_than => 1.megabyte validates_attachment_content_type :photo, :content_type => ['image/jpeg', 'image/png', 'image/gif']
Widok

[code]<%= form_for @video, :html => { :multipart => true } do |f| %>
<% if @video.errors.any? %>


    <% @video.errors.full_messages.each do |msg| %>
  • <%= msg %>

  • <% end %>

      <% end %> . . .[/code] Waldiacje z modelu Video się wyświetlają i tylko one działąją.

Tak to działa w przypadku innego modelu gdzie walidacje są typu validates :name, :presence => true (np dla modelu Author powiązanego z modelem Video) ale ten sposób nie działa w przypadku modelu Photo, dopiero jak naprzykład dodam do modelu Video taką walidację:

validates :photo, :presence => true

to działa ale nie mogę tego zrozumieć czemu walidacje paperclipowe nie działają wogóle.

Upewnij sie ze dodales accepts_nested_attributes_for :photo i że budujesz gdzies przed wyswietleniem formularza pusta asocjacje.np.

<%- form.object.build_photo unless form.object.photo %>

Też nie działa to samo można przecież w metodzie new modelu Video dodać:

def new @video = Video.new @video.build_photo end
Proszę o pomoc czy to jest jakiś błąd w Railsach 3? Wydaje mi się że wszystko mam ok a walidacja nie działa i obiekt jest tworzony pomimo ustawionej walidacji w Photo.

A co najlepsze gdy próbuje zapisać obiekt bez wypełnionych pól modelu Video tam gdzie mam ustawione walidacje pojawiają się komunikaty walidacyjne ale znika mi pole :photo

Dodałem do metody create jeszcze:

@video.build_photo

i walidacja zaczęła działać tylko że pokazuje się komunikat ciągle:

Photo photo file name must be set.

Próbuje ustawić ten atrybut ale niestety cały czas pojawia się ten komunikat.