2009/5/21 Pardee, Roy <[email protected]>

>  At the risk of being nitpicky, @@variables are not globals--they are
> class variables.  Globals vars start with a $.
>

Yes of course, I am still getting the hang of ruby.  I think my comments
still apply, though not quite as strongly.  I suppose if I wrap it in a
class method I can probably live with my conscience.

Of course my whole concept of having a 'special' record is a bit yucky.  I
think maybe some refactoring is in order to improve the whole design.

Colin


>
>  ------------------------------
> *From:* [email protected] [mailto:
> [email protected]] *On Behalf Of *Colin Law
> *Sent:* Thursday, May 21, 2009 9:30 AM
> *To:* [email protected]
> *Subject:* [Rails] Re: Referencing 'constant' record in db
>
>  2009/5/21 Stephan Wehner <[email protected]>
>
>>
>> Colin Law wrote:
>> > 2009/5/21 Stephan Wehner <[email protected]>
>> >
>> >>
>> >>
>>  > I am trying to avoid a db query each time I reference the (constant)
>> id
>> > when
>> > the application is running, that was the idea of looking it up when the
>> > class is loaded and saving in a constant (which does not work in test
>> > mode
>> > as the fixtures have not always been loaded when the class is loaded)
>> >
>>
>>  I meant it is not clear what the nature of this special record is, and
>> what conditions you have.
>>
>> >>
>> >>
>> >> If for the Item class there is just this one special record, can you
>> >> force the id to be simply 0 by manipulating the database?
>> >>
>> >
>> > My initial solution was to have a well-known id for the special record.
>> > The
>> > problem with this in testing is that one has to then include the special
>> > record with that id explicitly in the fixture. One cannot then make use
>> > of
>> > the automatic fixup of habtm tables using the names of the fixture
>> > records
>> > and so have to manually provide fixtures for the habtm join tables.
>> > Plus
>> > the idea of a record in the db having a well-known id is a bit yucky.
>>
>>  How about adding this method to your Item class:
>>
>>  # is this the special record "named_scope_for_constant_record" ?
>>  def special?
>>    @@special_record_id ||=  Item.named_scope_for_constant_record.id
>>    self.id == @@special_record_id_id
>>  end
>>
>
> Of course, I should have thought of using a global variable rather than a
> constant.  I didn't because I generally consider global variables to be
> evil.  I think this may be the first time for many a year that I have found
> a good use for one.  Though really, though technically it is a global
> variable, it is being used as a constant.
>
> Problem solved, many thanks for helping
>
> Colin
>
>
>>
>> There is a thread-issue around using ||= (
>>
>> http://coderrr.wordpress.com/2009/04/29/is-not-thread-safe-neither-is-hashnew-hk
>> ) but that doesn't matter here.
>>
>> Now you can even stub the special? method. Also, if the condition for
>> special? changes you just change the method.
>>
>> Stephan
>>
>> > Colin
>>
>> --
>>   Posted via http://www.ruby-forum.com/.
>>
>>
>>
>
>
>
> ------------------------------
> GHC Confidentiality Statement
>
> This message and any attached files might contain confidential information
> protected by federal and state law. The information is intended only for the
> use of the individual(s) or entities originally named as addressees. The
> improper disclosure of such information may be subject to civil or criminal
> penalties. If this message reached you in error, please contact the sender
> and destroy this message. Disclosing, copying, forwarding, or distributing
> the information by unauthorized individuals or entities is strictly
> prohibited by law.
>
> >
>

--~--~---------~--~----~------------~-------~--~----~
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
-~----------~----~----~----~------~----~------~--~---

Reply via email to