Forum: Ruby on Rails how to create a permanent record in table

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.
Adam A. (Guest)
on 2009-01-22 14:28
I want one record in my table to be undeletable by a user. I guess/know
i can achieve this by writing code in my controller and model to only
present the user with reocords which can be deleted but im wondering if
there are any magic rails methods that can do this in a concrete way?

background: Im writing a todolist which has two tables, tasks and
projects whih have a standard has_many relationship. ie. a project has
many tasks.

When a user creates a task they specify whihc project they want to add
it to.
If a task is just a one off and not aprt of any project the user can
specify "No project" in teh project dropdown. this in fact is a project
but just using it to create the illusion! this is the record i dont want
the user to be able to delete.
Andrew T. (Guest)
on 2009-01-22 15:01
(Received via mailing list)
On Thu, Jan 22, 2009 at 2:28 PM, Adam A. <
removed_email_address@domain.invalid> wrote:

> When a user creates a task they specify whihc project they want to add
> it to.
> If a task is just a one off and not aprt of any project the user can
> specify "No project" in teh project dropdown. this in fact is a project
> but just using it to create the illusion! this is the record i dont want
> the user to be able to delete.
> --
> Posted via http://www.ruby-forum.com/.
>
> >
>
Set the model readonly

class MyModel < ActiveRecord::Base
  def initialize(*args)
    super(*args)
    readonly!
  end
end

--
Andrew T.
http://ramblingsonrails.com
http://www.linkedin.com/in/andrewtimberlake

"I have never let my schooling interfere with my education" - Mark Twain
Robert W. (Guest)
on 2009-01-27 17:39
Andrew T. wrote:
> Set the model readonly
>
> class MyModel < ActiveRecord::Base
>   def initialize(*args)
>     super(*args)
>     readonly!
>   end
> end
Wouldn't this make all records of the table read only? I don't think
that's what the OP wanted.

I'd say use the the before_destroy callback to validate the deletion:

def before_destroy
  !project_name.eql?("No project")
end
Robert W. (Guest)
on 2009-01-27 18:28
Robert W. wrote:
> I'd say use the the before_destroy callback to validate the deletion:
>
> def before_destroy
>   !project_name.eql?("No project")
> end

On second thought this might be a better approach:

class Project < ActiveRecord::Base
  before_destroy :protect_no_project

  private
  def protect_no_project
    !name.eql?("No project")
  end
end

It sounds like overriding the callback directly may not be the best
approach.
Adam A. (Guest)
on 2009-01-28 11:31
Thanks everyone for your input. Yes I did only want to protect one of
the records so ill give your (roberts) method a shot!

thank you very much
This topic is locked and can not be replied to.