Yardımıma ihtiyacım var. Bunu çalışmak için çok aptalca hissediyorum ama gerçekten bunu anlayamıyorum.Has_and_belongs_to_many ve Tek Tablo Kalıtım
Alt model ile başka bir model arasında birleştirme tablosu oluşturmam gerekiyor.
1) Benim izinleri şemasını takip etmek sınıflandırma edilebilir bir kullanıcı Modeli var:
class User < ActiveRecord::Base
# so we can use Single Table inheritance with each role for the platform
self.inheritance_column = :role
end
2) Ben rol = "Rp" ile Kullanıcıyı alt sınıfların bir Rp daha alt seviyede var ve bu ilişki mekan modeli:
class Rp < User
has_and_belongs_to_many :venues
end
3) bir mekan modeli var ve Rp modeline bu ilişki:
class Venue < ActiveRecord::Base
has_and_belongs_to_many :rps
end
4) sırayla katılmak tablo var ve göç:
class CreateJoinTableVenueRp < ActiveRecord::Migration
def change
create_join_table :Venues, :Rps do |t|
t.index [:venue_id, :rp_id]
t.index [:rp_id, :venue_id]
end
end
end
Bu Rps_Venues veritabanında tablo katılmak bana veriyor. Ben
Venue.first.rps
ve
Rp.first.venues
yapabilmek için beklediğiniz, ancak
Ama bunu yaparken, her nasılsa Aktif Kayıtlar bananers gider: Tüm iyidir ve uygun birleştirme tablosunu kapmak yerine, yerine Rp sınıfına, Kullanıcı:
Loading development environment (Rails 4.2.5.1)
[1] pry(main)> Venue.first.rps
Venue Load (0.9ms) SELECT "venues".* FROM "venues" ORDER BY "venues"."id" ASC LIMIT 1
ActiveRecord::StatementInvalid: PG::UndefinedTable: ERROR: **relation "users_venues" does not exist**
LINE 5: WHERE a.attrelid = '"users_venues"'::regclass
^
: SELECT a.attname, format_type(a.atttypid, a.atttypmod),
pg_get_expr(d.adbin, d.adrelid), a.attnotnull, a.atttypid, a.atttypmod
FROM pg_attribute a LEFT JOIN pg_attrdef d
ON a.attrelid = d.adrelid AND a.attnum = d.adnum
WHERE a.attrelid = '"users_venues"'::regclass
AND a.attnum > 0 AND NOT a.attisdropped
ORDER BY a.attnum
from /home/null/.rvm/gems/ruby-2.2.3/gems/activerecord-4.2.5.1/lib/active_record/connection_adapters/postgresql_adapter.rb:592:in `async_exec'
[2] pry(main)> Rp.first.venues
Rp Load (1.4ms) SELECT "users".* FROM "users" WHERE "users"."role" IN ('Rp') ORDER BY "users"."id" ASC LIMIT 1
ActiveRecord::StatementInvalid: PG::UndefinedTable: ERROR: **relation "users_venues" does not exist**
LINE 5: WHERE a.attrelid = '"users_venues"'::regclass
^
: SELECT a.attname, format_type(a.atttypid, a.atttypmod),
pg_get_expr(d.adbin, d.adrelid), a.attnotnull, a.atttypid, a.atttypmod
FROM pg_attribute a LEFT JOIN pg_attrdef d
ON a.attrelid = d.adrelid AND a.attnum = d.adnum
WHERE a.attrelid = '"users_venues"'::regclass
AND a.attnum > 0 AND NOT a.attisdropped
ORDER BY a.attnum
from /home/null/.rvm/gems/ruby-2.2.3/gems/activerecord-4.2.5.1/lib/active_record/connection_adapters/postgresql_adapter.rb:592:in `async_exec'
Herkes biraz yardımcı olabilir mi?