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