Problem with setter override on ActiveRecord?

I recommend creating a virtual attribute instead of overriding the author method class Book Name if author end end Then you could do cool things like apply it to a form field %= f. Text_field :author_name % Would this work for your situation?

I recommend creating a virtual attribute instead of overriding the author= method. Class Book Would this work for your situation?

I thought to make this, but I didn't want duplicate attributes. The method I proposed above is working very well; I just wanted to share it. I can indeed make the text_field trick with it.

But thanks for your reply! =D – Lailson Bandeira Aug 16 '09 at 1:04 Wouldn't it be more correct to replace the author_name method with delegate :name, :to => :author, :prefix => true? – Adam Lassek Apr 20 '10 at 0:50 1 @Adam, That is certainly an alternative way to do it.

I usually only use delegate when dealing with multiple methods. If there's only one I prefer defining the method directly because I feel it's more clear. – ryanb Apr 20 '10 at 18:09 Are there any hidden downsides to using delegate, or is this just personal preference?

– Adam Lassek Apr 20 '10 at 21:07 I can't think of any downsides to using delegate. It just feels a little more complicated than defining the method directly in this specific scenario. – ryanb Apr 20 '10 at 20:03.

When you override the accessor, you have to set an actual DB attribute for write_attribute and self:the_attribute=, and not the name of the association-generated attribute you're overriding. This works for me. Require 'rubygems' require 'active_record' ActiveRecord::Base.

Establish_connection(:adapter => "sqlite3", :dbfile => ":memory:") ActiveRecord::Schema. Define do create_table(:books) {|t| t. String :title } create_table(:authors) {|t| t.

String :name } end class Book author_name) end end end class Author "John Doe") Author. Create!(:name => "Tolkien") b1 = Book. New(:author => "John Doe") p b1.

Author # => # b2 = Book. New(:author => "Noone") p b2. Author # => # b2.

Save p b2. Author # => # I strongly recommend doing what Ryan Bates suggests, though; create a new author_name attribute and leave the association generated methods as they are. Less fuzz, less confusion.

As I said above, the method you proposed works only if the author is save (i.e. Has an id), which is not my case. I can have a new author that must be saved only when the book is saved too.

– Lailson Bandeira Aug 16 '09 at 1:07 I re-wrote it a bit based on your comment. Does it make more sense now? – August Lilleaas Aug 16 '09 at 7:34 Oh thanks, now this works as I expect.

But (in spite of all recommendations) I'll keep the original solution. Nonetheless, it's a good alternative if I change my mind someday. = – Lailson Bandeira Aug 16 '09 at 12:25.

I hope this can be useful to others facing the same problem. Let me explain with an example. But, for whatever reason, you need to override the author= method on Book.

As I'm new to Rails, I've followed the Sam Ruby's suggestion on Agile Web Development with Rails: use attribute_writer private method. Unfortunately, this does not work.

I cant really gove you an answer,but what I can give you is a way to a solution, that is you have to find the anglde that you relate to or peaks your interest. A good paper is one that people get drawn into because it reaches them ln some way.As for me WW11 to me, I think of the holocaust and the effect it had on the survivors, their families and those who stood by and did nothing until it was too late.

Related Questions


Thank You!
send