Mark Reginald James wrote:
> Nate wrote:
>
>>
>> class Revision < ActiveRecord::Base
>> belongs_to :environment
>> belongs_to :source_revision,
>> :class_name => 'Revision',
>> :foreign_key => 'source_revision_id'
>> end
>
> In your Revision model are you making any assignments to an @environment
> instance variable, or have you defined an "environment" attr_accessor?
> If so, rename to avoid conflict with the belongs_to.
>
> --
> We develop, watch us RoR, in numbers too big to ignore.
Is there a way to do this and have it use the association? I need to
override the assoc= method of a model to make sure the assignment
matches some predefined criteria. However, if I try to assign via
@assoc= I get the error message about an undefined target, and if I use
self.assoc= I wind up in an endless recursion until a stack overflow
occurs.
class Project < ActiveRecord::Base
belongs_to :status, :class_name => "ProjectStatus",
:foreign_key => 'status_code'
# Updates the current project's status unless the current
# status is greater than the new status. Status' are compared
# using ProjectStatus::compare_status method The
# new_project_status argument should be a ProjectStatus record
# (i.e. ProjectStatus::SOME_STATUS)
def status= (new_project_status, override = false)
puts "Current status = [EMAIL PROTECTED]" #Debugging
if override or @status < new_project_status
puts "New status = #{new_project_status}" #Debugging
@status = new_project_status
else
puts "No change in status" #Debugging
end
end
end
class ProjectStatus < ActiveRecord::Base
has_many :project, :foreign_key => "status_code"
def > (status); compare_status(status, ">"); end
def >= (status); compare_status(status, ">="); end
def < (status); compare_status(status, "<"); end
def <= (status); compare_status(status, "<="); end
def self.find_by_code (code)
ProjectStatus.find(:first, :conditions => ['code = ?', code])
end
def to_s; self.status; end
def to_i; self.id; end
# Setup some shortcuts i.e. ProjectStatus::SOME_STATUS
# will return the status record for that code
def self.const_missing(sym)
if s = ProjectStatus.find_by_code(sym.to_s)
s
else
super
end
end
private
def compare_status (status, op)
eval self.order.to_s + op + status.order.to_s
end
end
--
Posted via http://www.ruby-forum.com/.
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups "Ruby
on Rails: Talk" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at
http://groups.google.com/group/rubyonrails-talk?hl=en
-~----------~----~----~----~------~----~------~--~---