alternatif lain pake ActiveRecord inheritance, lebih clean codenya
$ script/generate model user
$ script/generate model supplier --skip-migration
$ script/generate model product
$ cat db/migrate/001_create_users.rb
class CreateUsers < ActiveRecord::Migration
def self.up
create_table :users do |t|
t.column "type", :string, :limit => 32, :default => 'User'
t.column "name", :string
end
end
def self.down
drop_table :users
end
end
$ cat db/migrate/002_create_products.rb
class CreateProducts < ActiveRecord::Migration
def self.up
create_table :products do |t|
t.column "name", :string
t.column "user_id", :integer
t.column "supplier_id", :integer
end
end
def self.down
drop_table :products
end
end
$ cat app/models/product.rb
class Product < ActiveRecord::Base
belongs_to :user
belongs_to :supplier
end
$ cat app/models/user.rb
class User < ActiveRecord::Base
has_many :products
end
$ cat app/models/supplier.rb
class Supplier < User
has_many :products
end
$ rake db:migrate
$ script/console
>> User.create(:name => 'user')
...
>> Supplier.create(:name => 'supplier')
...
>> User.find(1).create_in_products(:name => 'user product')
...
>> Supplier.find(2).create_in_products(:name => 'supplier product')
...
>> User.find(1).products
=> [#"user product",
"id"=>"1", "supplier_id"=>nil, "user_id"=>"1"}>]
>> Supplier.find(2).products
=> [#"supplier product",
"id"=>"2", "supplier_id"=>"2", "user_id"=>nil}>]
On Nov 21, 2007 2:31 AM, Marcelinus Gozali <[EMAIL PROTECTED]> wrote:
> Saya sih nangkepnya relasi antar product ke usernya one-to-one, yaitu 1
> product hanya mempunyai 1 owner dan 1 supplier.
> Tapi satu user itu dual role sebagai Owner dan Supplier.
>
> Kalau bener codenya kaya gini:
>
> class Product
>belongs_to :owner, :class_name => "User",
> :foreign_key =>"owner_id"
>belongs_to :supplier, :class_name => "User",
> :foreign_key =>"supplier_id"
> end
>
> class User
> has_many :owner_products, :class_name => "Product",
>:foreign_key => "owner_id"
> has_many :supplier_products, :class_name => "Product",
>:foreign_key => "supplier_id"
> end
>
>
> hadi_indomulti wrote:
> > sori mungkin topiknya rada ambigu, ini coba saya jelasin:
> > rails 1.2.3, ruby 1.8.6, xp sp2
> >
> > sebuah produk adalah milik 1 owner yang dikirim oleh 1 supplier (yang
> > mungkin beda orang), owner dan supplier masuk dalam 1 kategori table
> > User dan produk masuk dalam table Product
> >
> > class Product ...
> > belongs_to :user, :foreign_key => owner_id
> > belongs_to :user, :foreign_key => supplier_id
> > ...
> > end
>
> p = Product.find(1)
> p.owner.name
> p.supplier.name
>
> asumsi user punya kolom 'name'
>
>
> >
> > Sepertinya masuk akan dan bisa dikerjakan, Product a punya owner, dan
> > punya supplier. Tapi bagaimana dengan class User nya?
> >
> > class User ...
> > has_many :product <-- **
> > ...
> > end
> >
> > ** - dalam kasus ini product itu milik supplier atau milik owner?
> > bagaimana dalam saat tertentu saya bisa bilang owner punya x product
> > dan dalam saat lain saya juga mau bilang supplier a punya product apa aja.
> User 1 sebagai supplier mempunyai product apa saja, codenya
> user = User.find(1)
> user.supplier_products
>
> Kalau user yg sama sebagai owner punya product apa saja:
> user = User.find(1)
> user.owner_products
> user.owner_products.size
>
> >
> > Apakah hal itu mungkin? apakah ada cara yang lebih baik?
> >
> > Sekian terima kasih
>
> Salam kenal,
> Marcel
>
>
>
> ID-Ruby
> Berdiskusi dan belajar bersama Bahasa Pemrograman Ruby, termasuk segala
> varian Ruby (JRuby, Rubinius, IronRuby, XRuby), dan program yang dibuat
> dengan Ruby (Ruby on Rails, JRuby on Rails)
>
> http://news.gmane.org/gmane.comp.lang.ruby.region.indonesia
>
>
> Yahoo! Groups Links
>
>
>
>