Witam.
Mam klopot z walidacja przy tworzeniu nowego wpisu do bazy. Mam w bazie relacje jeden do wielu, jedna kategoria moze miec wiele produktów.
kontroler dla Category:
[code]class CategoryController < ApplicationController
def new
@category = Category.new
respond_to do |format|
format.html # new.html.erb
format.xml { render :xml => @category }
end
end
def create
respond_to do |format|
if param_posted?(:category)
@category = Category.new(params[:category])
if @category.save
flash[:notice] = 'Kategoria zastała utworzona!'
format.html { redirect_to(@category) }
format.xml { render :xml => @category, :status => :created, :location => @category }
else
format.html { render :action => 'new' }
format.xml { render :xml => @category.errors, :status => :unprocessable_entity }
end
end
end
end
end[/code]
Model Category
class Category < ActiveRecord::Base
attr_accessible :name, :description
has_many :products, :dependent => :destroy
validates_associated :products
validates_presence_of :name, :description
validates_length_of :name, :minimum => 5, :too_short => "must have at least {{count}} words"
validates_length_of :description, :minimum => 5, :too_short => "must have at least {{count}} words"
end
Forma dla strony category/new
[code]<%= form_for (@category) do |f| %>
<% if @category.errors.any? %>
<%= pluralize(@category.errors.count, “error”) %> prohibited this post from being saved:
<ul>
<% @category.errors.full_messages.each do |msg| %>
<li><%= msg %></li>
<% end %>
</ul>
</div>
<% end %>
<%= f.text_field :name %>
<%= f.label :description %>
<%= f.text_field :description %>
<% end %>[/code]
Po nacisnieciu przycisku zapisz przekierowywuje mnie do strony category/index. Sytuacja ma miejsce zarowno jak w formie w name i description nic nie wpisze lub wpisze np po dwa znaki.
Na bazie danych Category - name ma wartosc not null.
Co mam zle, ze walidacja nie wyrzuca bledow i nie sa one wyswietlane?
Zawartosc pliku routes:
[code]get “pages/account”
get “category/new”
post “category/new”
#get “product/index”
match ‘/products’, :to => ‘product#index’
#get “category/index”
match ‘/categories’, :to => ‘category#index’
get “pages/home”
get “pages/contact”
match ‘/contact’, :to => ‘pages#contact’
match ‘/about’, :to => ‘pages#about’
match ‘/account’, :to => ‘pages#account’
match ‘/images’, :to => ‘public#images’[/code]
Za pomoc z gory dziekuje.