Wyswietlanie bledow podczas walidacji

Kiedy wygeneruje sobie scaffold i w modelu dodam np [quote]validates_presence_of :title, :description, :date[/quote]
to w wypadku wpisania pustego pola nad formularzem wyskakuje czerwona ramka z opisem bledu

[quote]Struktura bazy
id
title
description
date[/quote]

[quote]<%= error_messages_for :article %>
<% form_for :article, :url => { :action => :add_article} do |f|%>

Tytul<%= f.text_field :title %>


Tresc<%= f.text_area :description, :rows => 6%>


Data <%= f.date_select :date %>
<%= submit_tag “Dodaj Artykul”%>
<% end %>[/quote]

[quote]class Article < ActiveRecord::Base
validates_presence_of :title, :description, :date
end[/quote]

[quote]def add_article
if request.post?
@temp = Article.new(params[:article])
if @temp.save
flash[:info] = “Artykul zostal zapisany w bazie danych”
redirect_to :action => “list_article”
end
end
end[/quote]
Walidacja dziala bo kiedy pole jest puste artykul nie zapisuje sie w bazie problem w tym ze nie jest wyswietlany blad.

[code]error_messages_for :article

#dalej
form_for :artible

a w kontrolerze

@temp = Article.new(params[:article][/code]
To zastanów się jak chcesz nazywać tą zmienną wszystkomówiące @temp czy @article? error_messages_for wyświetli info o błędach zmiennej instancji @article, ale ty w kontrolerze wolisz operować na @temp. Kumasz swój błąd?

A co to za add_article, list_article? Staraj się używać nazw typu new create show itp.

W jakim miejscu można edytować tekst błędów wyświetlany po walidacji?

W modelu:

validates_presence_of :title, :message => 'brakuje tytułu'

Polecam dokumentację http://apidock.com/rails/ActiveRecord/Validations/ClassMethods/validates_presence_of :slight_smile:

[quote=bh]W modelu:

validates_presence_of :title, :message => 'brakuje tytułu'

Polecam dokumentację http://apidock.com/rails/ActiveRecord/Validations/ClassMethods/validates_presence_of :)[/quote]
Albo w plikach z tłumaczeniami.

http://guides.rubyonrails.org/i18n.html#translations-for-active-record-models

Trochę bardziej elastyczne rozwiązanie. Oczywiście jeżeli jesteś pewien, że aplikacja nigdy nie będzie tłumaczona, to możesz spokojnie zostać przy powyższym wrzuceniu stringa do modelu.

U mnie jest taka sytuacja:
Widok:

<%= error_messages_for :user %> <% form_for :user, :url => {:action => "update_date_deadline"} do |f| %> <%= f.hidden_field :id, :value => user.id %> </br><label>(RRRR-MM-DD)</label> <%= f.text_field :deadline %> <input id="inputsubmit7" type="submit" name="inputsubmit7" value="Dodaj" /> <% end %>
Model User:
validates_presence_of :deadline, :message => “nie może być pusty”

I to mi nie chce działać. W ogóle nie reaguje na walidacje. Modyfikuje pole jak jest puste.
PS. czy jest jakas walidacja odnosnie formatu daty? Zeby trzeba bylo wpisac w formacie RRRR-MM-DD

Jeśli updatejtujesz to metodą update_attribute to jest to normalne, nie wywołuje ona walidacji tylko zapisuje jak leci.

A odnośnie walidacji daty użyj validates_format_of

Zgadza się. Używam w tym miejscu update_attribute. W takim razie jak to rozwiązać?

Tak właściwie, to do tego co chcesz zrobić, nie potrzebujesz nowej akcji. Zakładając że cały user jest poprawy, przechodzi walidację, możesz skierować ten formularz do akcji update i wywal akcję update_date_deadline

Przerzuciłem do akcji update, ale dalej tak samo jest

A podczas tworzenia walidacja działa?

przy rejestracji użytkownika walidacja działa normalnie.

To pokaż akcję update i wrzuć paramsy, jakie przekazujesz do tej akcji

[code]def update
@user = User.find(params[:id])

  if @user.update_attributes(params[:user])
    flash[:notice] = 'Konto zostało edytowane.'
    redirect_to "/home/index"
  else
    render :action => "edit"
  end

end[/code]
Widok wygląda w tej chwili tak:

<% form_for :user, :url => {:action => "update", :id => @user.id } do |f| %> </br><label>(RRRR-MM-DD)</label> <%= f.text_field :deadline %> <input id="inputsubmit7" type="submit" name="inputsubmit7" value="Dodaj" /> <% end %>

w bazie nazywa się date, w przesyłasz deadline

Niee. W bazie pole nazywa się deadline.

Pokaż model user

[code]class User < ActiveRecord::Base

Virtual attribute for the unencrypted password

attr_accessor :password

validates_presence_of :login, :email, :name, :last_name, :deadline, :message => “nie może być pusty”
validates_presence_of :password, :if => :password_required?
validates_presence_of :password_confirmation, :if => :password_required?
validates_length_of :password, :within => 4…40, :if => :password_required?, :message => “jest za krótki (minimum 4 znaki)”
validates_confirmation_of :password, :if => :password_required?, :message => “nie zgadza się”
validates_length_of :login, :within => 3…40, :message => “jest za krótki (minimum 3 znaki)”
validates_length_of :email, :within => 3…100,:message => “jest za krótki (minimum 3 znaki)”
validates_uniqueness_of :login, :email, :case_sensitive => false, :message => “jest zajęty”
before_save :encrypt_password[/code]

tak to jest jak się dopisujesz do dwuletniego tematu :]

Czy jest ktoś w stanie napisać jak zrobić walidację w takiej sytuacji jak jest opisana powyżej?