oh, ok tnx.
понедельник, 4 декабря 2017 г., 7:28:47 UTC+3 пользователь Jeremy Evans
написал:
>
> On Sunday, December 3, 2017 at 7:51:15 PM UTC-8, tdrive wrote:
>>
>> I'm trying to rewrite my project from AR to Sequel and I have a problem.
>>
>> For examle we have tables
>> create_table :users do |t|
>> t.string :name
>> end
>>
>> create_table :relations do |t|
>> t.string :type
>> t.integer :user_id
>> t.integer :with_user_id
>> end
>>
>> and models
>> class Relation::Base < ActiveRecord::Base
>> self.table_name = :relations
>>
>> belongs_to :user
>> belongs_to :with_user, class_name: "User"
>> end
>>
>> class Relation::Colleague < Relation::Base
>> end
>>
>> class Relation::Friend < Relation::Base
>> end
>>
>> class User < ActiveRecord::Base
>> has_many :friend_relations, class_name: "Relation::Friend"
>> has_many :colleague_relations, class_name: "Relation::Colleague"
>>
>> has_many :friends, through: :friend_relations, source: :with_user,
>> class_name: "User"
>> has_many :colleagues, through: :colleague_relations, source:
>> :with_user, class_name: "User"
>> end
>>
>>
>> How should I rewrite the :friends and :colleagues associations without
>> hardcoded conditions type='Relation::Colleague' and type='
>> Relation::Friend'
>>
>
> Sequel doesn't ship with support for polymorphic associations, so if you
> want it in Sequel you have to hardcode the conditions, with something like:
>
> class User
> many_to_many :friends, join_table: :relations, right_key: :with_user_id,
> class: self do |ds|
> ds.where{relations[:type] =~ 'Relation::Friend'}
> end
> end
>
> These types of associations are fairly easy to metaprogram by using a loop
> to handle all your polymorphic types.
>
> There is the sequel_polymorphic external plugin that you could try,
> especially if you want easier access to modify such polymorphic
> associations. Alternatively, split your polymorphic join table into
> separate tables for friends and colleagues and then you don't need any
> polymorphism and can benefit from the increased simplicity and the ability
> to enforce referential integrity in the database.
>
> Thanks,
> Jeremy
>
--
You received this message because you are subscribed to the Google Groups
"sequel-talk" 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/sequel-talk.
For more options, visit https://groups.google.com/d/optout.