"belongs_to" aliases

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

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.

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.