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.
803ad415efcdcbf09b1addeb319650d7?d=identicon&s=25 Adam Akhtar (thegeezer3)
on 2009-01-22 13: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.
5772c599ccab3081e0fffb1d54f3b6de?d=identicon&s=25 Andrew Timberlake (andrewtimberlake)
on 2009-01-22 14:01
(Received via mailing list)
On Thu, Jan 22, 2009 at 2:28 PM, Adam Akhtar <
rails-mailing-list@andreas-s.net> 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 Timberlake
http://ramblingsonrails.com
http://www.linkedin.com/in/andrewtimberlake

"I have never let my schooling interfere with my education" - Mark Twain
280b78a61a968391b7e07e912be102a8?d=identicon&s=25 Robert Walker (robert4723)
on 2009-01-27 16:39
Andrew Timberlake 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
280b78a61a968391b7e07e912be102a8?d=identicon&s=25 Robert Walker (robert4723)
on 2009-01-27 17:28
Robert Walker 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.
803ad415efcdcbf09b1addeb319650d7?d=identicon&s=25 Adam Akhtar (thegeezer3)
on 2009-01-28 10: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.