Sequel gem (which i had used for supporting legacy databases) is clearer to
me. But i still can work on both ActiveRecord and Sequel-type associations.

https://github.com/jeremyevans/sequel#associations


On Sat, Sep 24, 2016 at 10:42 PM, Chad Woolley <[email protected]>
wrote:

> I agree.  I've been doing Rails for 10 years (and databases for going on
> 25)), and "belongs_to" has always been a cognitive blocker for me.
>
> I wouldn't do away with "belongs_to", but making "has_key_for" aliases
> sounds like a great idea, for people who want to write their code that way.
>
> But, most likely this should be in a gem, probably not a lot of chance of
> it making it into official Rails (I may be wrong, but I doubt it).
>
> -- Chad
>
> On Sat, Sep 24, 2016 at 2:01 AM, Richard McSharry <[email protected]>
> wrote:
>
>> Any framework that has convention over configuration has the the problem
>> that newcomers have to learn the conventions.
>>
>> I think that one of the biggest stumbling blocks to new users of Rails is
>> the way associations are described. Just look at the number of questions on
>> this on SO. M-1 and 1-M and even M-1-M are really quite simple concepts,
>> but the Rails naming of these relationships just serves to confuse.
>>
>> Here is a good definition that kind of gets at the root cause:
>>
>> > belongs_to and has_many do not describe either the ownership or the
>> scope or the life cycles for the objects they relate. They may give that
>> impression because 'belongs' implies ownership and responsibility, but they
>> merely describe the references (the keys) between the objects.
>>
>> Even the [documentation](http://api.rubyonrails.org/classes/ActiveRec
>> ord/Associations/ClassMethods.html) states:
>>
>> > Associations are a set of macro-like class methods for tying objects
>> together through foreign keys
>>
>> In that case isn't it easier if we called a spade a spade, and not a
>> shovel? ;)
>>
>> Surely all the confusion would be cleared up by renaming `belongs_to`?
>> This would lower the barrier to learning Rails, resulting in less mistakes,
>> less time wasted asking and answering on SO, less discussions, less blogs
>> -> overall a HUGE time saver for the community **over the long term**
>> (against which you have to weigh the short-term pain of adopting the change
>> of course).
>>
>> **Example 1 - one-to-one**
>> ```ruby
>> class Employee
>>   has_one :salary
>> end
>> class Salary
>>   has_key_for :employee
>> end
>> ```
>>
>> **Example 2 - one-to-many**
>> ```ruby
>> class Manager
>>   has_many :employees
>> end
>> class Employee < ActiveRecord::Base
>>   has_key_for :manager
>> end
>> ```
>>
>> **Example 3- M-1-M**
>> ```ruby
>> class Project
>>   has_many :assignments
>>   has_many :employees, through: :assignments
>> end
>>
>> class Employee
>>   has_many :assignments
>>   has_many :projects, through: :assignments
>> end
>>
>> class Assignment
>>   has_key_for :employee
>>   has_key_for :project
>> end
>> ```
>>
>> **Example 4 - Polymorphic**
>> ```ruby
>> class Address
>>   has_key_for :addressable, :polymorphic => true
>> end
>>
>> class Person
>>   has_one :address, as: :addressable
>> end
>> ```
>>
>> I think this just leaves "has_and_belongs_to_many" which personally I
>> have always hated. :)  Why not just use "has_many"? Since when you have an
>> explicit join table for M-M, you use "through"...so if there is no
>> "through" specified, we know it is a HABTM.
>>
>>
>> --
>> You received this message because you are subscribed to the Google Groups
>> "Ruby on Rails: Core" group.
>> To unsubscribe from this group and stop receiving emails from it, send an
>> email to [email protected].
>> To post to this group, send email to [email protected].
>> Visit this group at https://groups.google.com/group/rubyonrails-core.
>> For more options, visit https://groups.google.com/d/optout.
>>
>
> --
> You received this message because you are subscribed to the Google Groups
> "Ruby on Rails: Core" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to [email protected].
> To post to this group, send email to [email protected].
> Visit this group at https://groups.google.com/group/rubyonrails-core.
> For more options, visit https://groups.google.com/d/optout.
>



-- 

Taqi Systems
269-J Jalan Panji
Kampung Chempaka, Kota Bharu, Kelantan 16100

Phone: +6097738657
Mobile: +60199788657

-- 
You received this message because you are subscribed to the Google Groups "Ruby 
on Rails: Core" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
Visit this group at https://groups.google.com/group/rubyonrails-core.
For more options, visit https://groups.google.com/d/optout.

Reply via email to