Chris To wrote:> Hi,
>
> I''ve added a couple of validations to my model, however whenever I
> submit with no information (to purposely fail) in the view form, I just
> get a generic rails error message (the kind with all the stack trace
> information).
>
> I have a feeling it might be in my controller, though I can''t seem
to
> find out what to put to get it to pass to the model. Here''s the
code in
> my controller:
>
> def begin
> end
>
> def end
> @location = Location.new(params[:location])
> end
>
> Here''s the code in my begin view:
>
> <% form_for :location, @location, :url => {:action =>
"end"} do |f| %>
>
> <%= f.label :city1 "enter 1st location" %>
> <p>
> <%= f.text_field :city1 %>
> <p>
> <%= f.label :city2, "enter 2nd location" %>
> <p>
> <%= f.text_field :city2 %>
>
> <% end %>
>
>
> And here''s the code to my end view:
>
> <%= @location.distance %>
>
> Model code:
>
> validates_presence_of :city1, :city2
>
>
> Any help would be appreciated. If there''s anything I missed,
please let
> me know.
Well, your ''wiring'' is a little... unique.
From the api docs (http://api.rubyonrails.org/), for ActiveRecord::Base
we have:
save(perform_validation = true)
Saves the model.
If the model is new a record gets created in the database, otherwise the
existing record gets updated.
If perform_validation is true validations run. If any of them fail the
action is cancelled and save returns false. If the flag is false
validations are bypassed altogether. See ActiveRecord::Validations for
more information.
There‘s a series of callbacks associated with save. If any of the
before_* callbacks return false the action is cancelled and save returns
false. See ActiveRecord::Callbacks for further details.
Sooo... without attempting a save, the validations aren''t called by
default. Otherwise how would you ever build a model without the
potential for generating errors via validations due to fields that have
not yet been set? In your case, you could call the validations manually
with an @location.valid? if you don''t want to attempt the save, but why
not let Rails do it automagically?
--
Posted via http://www.ruby-forum.com/.