How to create a permanent record in table


#1

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.


#2

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


#3

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


#4

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.


#5

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