Forum: Ruby on Rails Preventing a submitted hash from ActiveRecord DB store

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
2dddec0f7717cae77ac6bceede6be5bc?d=identicon&s=25 Ram (Guest)
on 2009-03-17 06:59
(Received via mailing list)
Hi all,

I have a multi model form (Project with many tasks) and I want to
prevent a task from being saved to the DB if it is empty ie. if there
is no i/p for that task from the user. I tried the following

class Task < ActiveRecord::Base

before_save :check_if_empty
...

def check_if_empty
    self.destroy if description.blank?
end

but i get this

TypeError in ProjectsController#create
can't modify frozen hash

Is there a way to let ActiveRecord know not to save a record (which is
a frozen hash in this case) to the DB?
872535e214a9e3a98889bd8d069f0294?d=identicon&s=25 "Wolas!" (Guest)
on 2009-03-17 10:08
(Received via mailing list)
validates_length_of :description, :minimum => 1
81b61875e41eaa58887543635d556fca?d=identicon&s=25 Frederick Cheung (Guest)
on 2009-03-17 10:23
(Received via mailing list)
On Mar 17, 5:58 am, Ram <yourstruly.vi...@gmail.com> wrote:
> Hi all,
>
> I have a multi model form (Project with many tasks) and I want to
> prevent a task from being saved to the DB if it is empty ie. if there
> is no i/p for that task from the user. I tried the following
>

If you don't want the save to happen then you should return false from
your before_save.

Fred
2dddec0f7717cae77ac6bceede6be5bc?d=identicon&s=25 Ram (Guest)
on 2009-03-17 10:44
(Received via mailing list)
@Wolas!,

I figured a validation will do the trick but knew something simpler
had to be there.

@Fred,

Dint count on it being SO simple!! :D <bangin head on wall>

Thanks guys. returning "false" did the trick.

On Mar 17, 2:22 pm, Frederick Cheung <frederick.che...@gmail.com>
2dddec0f7717cae77ac6bceede6be5bc?d=identicon&s=25 Ram (Guest)
on 2009-04-03 07:42
(Received via mailing list)
Hi Fred,

I had Project has_many Tasks and i had the following before_save
callback on Task

  def capitalis
    if (name.blank?)
      false
    else
      self.name = name.capitalize
    end
  end

Now I need to make Project and Task share a HABTM relationship. I
started experimenting with it after establishing the associations.
Created a new Project, with some tasks in it and left on task blank. I
got an ActiveRecord::RecordNotSaved error for the blank Task.
Now I understand it is because of the false return in the callback.
And this also cancels all following callbacks and association
callbacks (?). So although the valid Tasks and the Project itself DO
get saved to the DB, I get this error.
Is it neat enough to rescue from this specific error in the controller
and ignore it? Seems slightly hacky.. so, is there a nicer way to
handle this?
Thanks..
This topic is locked and can not be replied to.