Re: "belongs_to" aliases

308 views
Skip to first unread message

Frederick Cheung

unread,
Sep 14, 2012, 5:59:33 AM9/14/12
to rubyonra...@googlegroups.com


On Friday, September 14, 2012 8:24:53 AM UTC+1, Panayotis Matsinopoulos wrote:
Hi,

Since "belongs_to" does not actually reflect (as an English wording) the real association that one object might have to another, I was thinking about aliasing it using the following code:

class ActiveRecord::Base
  class << self
    alias :refers_to :belongs_to
    alias :is_of     :belongs_to
    alias :has_a     :belongs_to
  end
end

Well I think that would work, but personally I wouldn't - I think you're sacrificing readability of the source (people have to know/remember about your extensions) just to make it sound better in english (has_a in particular muddies the water further between has_one & belongs_to). Dave Thomas articulated this better than I could a while ago: http://pragdave.blogs.pragprog.com/pragdave/2008/03/the-language-in.html


Fred 

Panayotis Matsinopoulos

unread,
Sep 14, 2012, 6:16:54 AM9/14/12
to rubyonra...@googlegroups.com
You may be right, but I have found a lot of other posts on Internet that they complain about "belongs_to". It does not bear the correct meaning for all cases. For example:

class Product

    belongs_to :status

end

.....Awful. No, the Product does not "belong" to a Status. It "has_a" status.

Also, "belongs" usually means that a "composition" relationship, such that if Status were to be removed, the corresponding Product would have to be removed too.

Another example:

class Product

    belongs_to :type

end

....Awful again. The product Types preexist the Products and a Product does not belong to a type. "is of" a type.

Certainly, the "belongs_to" as a DSL does not describe the domain on the particular cases.

Thanks for letting me know that my workaround will work. I will have the second thoughts on whether to use or not. I have read the article by Dave. Thanks for that reference too. 



--
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 rubyonra...@googlegroups.com.
To unsubscribe from this group, send email to rubyonrails-ta...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msg/rubyonrails-talk/-/PiHuxshy4Y0J.

For more options, visit https://groups.google.com/groups/opt_out.
 
 



--
Panayotis Matsinopoulos

Robert Walker

unread,
Sep 18, 2012, 5:56:33 PM9/18/12
to rubyonra...@googlegroups.com
Panayotis Matsinopoulos wrote in post #1076115:
> You may be right, but I have found a lot of other posts on Internet that
> they complain about "belongs_to". It does not bear the correct meaning
> for
> all cases. For example:
>
> class Product
>
> belongs_to :status
>
> end
>
> .....Awful. No, the Product does not "belong" to a Status. It "has_a"
> status.

The "belongs to" is not really intended to mean what you seem to think
it means. The way I think about it is that the product "object" belongs
to the status "object".

I agree with Frederick. I see no reason to muddy the waters and
potentially confuse experience Rails developers.

Consistency in naming is far more important than grammar syntax in an
API. Besides that, has_many, belongs_to, etc. are internal
implementation details. Not need to worry to much about the public API
that the are used internally to create:

product.status

It makes little difference what the internal implementation of Product
looks like from the outside.

--
Posted via http://www.ruby-forum.com/.
Reply all
Reply to author
Forward
0 new messages