I have a number of standard rails validations within my model:
validates_presence_of :url_string
validates_uniqueness_of :url_string
validates_presence_of :stream_source
validates_presence_of :width
validates_presence_of :height
validates_presence_of :name
validates_uniqueness_of :name
validates_presence_of :customer_name
validates_presence_of :iframe_background_color
If I don't fill out one of these fields within my form then I am taken back to the form as expected but the odd thing is no error messages are displayed. I am using the code below to display the error messages:
<% @camera.errors.full_messages.each do |error| %>
<p><%= error %></p>
<% end %
I also attempted to print out the @camera.errors object and this is what is shown:
#<ActiveModel::Errors:0x12db19bc @base=#<Camera id: 1, stream_source: "test", width: 640, height: 360, active: true, name: "test", url_string: "CAYD19Vp", customer_name: "test", iframe_background_color: "#FFFFFF", online: true, created_at: "2011-08-30 15:54:16", updated_at: "2011-09-06 15:52:48", audio: true, iframe_text_color: "#FF00FF", iframe_link_color: "#FF0000", notes: "Some notes!", offline_image_file_name: "Cake.jpg", offline_image_content_type: "image/jpeg", offline_image_file_size: 196591, offline_image_updated_at: "2011-09-06 12:12:38", pull_stream_url: "test", bitrate: "300-500", show_branding: false>, @messages={}>
#
As you can see the messages hash is empty. I tried setting the validation error message manually by doing the following:
validates_presence_of :name, :message => "No name present"
but it did not populate the messages hash either.
Controller update action is shown below:
def update
@camera = Camera.find(params[:id])
if @camera.update_attributes(params[:camera])
flash[:notice] = "Camera updated"
redirect_to nwcadmin_camera_path
else
redirect_to :action => :edit
end
end
I am using Ruby version ruby 1.9.2p290 and Rails version 3.1.0.
Any assistance would be great!
Thanks
Just a heads up that you'll get a Validation failed (ActiveRecord::RecordInvalid)
error with an empty error message (if there are no other errors) when you have before_validation
declarations and any of them returns false
.
Note that before_validation
callbacks must not return false
(nil
is okay) and this can happen by accident, e.g., if you are assigning false
to a boolean attribute in the last line inside that callback method. Explicitly write return true in your callback methods to make this work (or just true at the end if your callback is a block (as noted here)).
UPDATE: This will no longer be an issue starting Rails 5.0, as return false
will no longer halt the callback chain (throw :abort
will now halt the callback chain).
UPDATE: You might also receive ActiveRecord::RecordNotSaved: Failed to save the record
if a callback returns false
.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With