Öncelikle herkese iyi forumlar.
Ruby on rails ile çalışıyorum ve bir modele birden fazla ilişkilendirme atamak zorundayım örneğin: User modeli
class User < ApplicationRecord
has_secure_password
has_many :members
has_many :winner
has_many :creator
end
Room modeli
class Room < ApplicationRecord
belongs_to :winner
belongs_to :creator
belongs_to :members
end
Burda yapmak istediğim bir oyun yapıyorum ve bu oyunda odalar olucak.
Her bir odanın bir oluşturanı,bir kazananı,ve katılan kullanıcıları olucak ve hepsini User modeli üzerinden oluşturmak istiyorum fakat birtürlü başaramadım.
İlişkilendirmeleri şu şekilde yapmam gerekiyor: winner => User modelinden has_many ile creator => User modelinden has_many ile members => User modelinden has_many ile fakat çok-a-çok ilişkilendirme olucak
Hocam yardımlarınız için çok teşekkür ederim verdiğiniz linkteki gibi herşeyi yaptım ama hata alıyorum kusura bakmayın rails’i yeni öğreniyorum.
User.rb:
class User < ApplicationRecord
has_many :winner, class_name: "User", foreign_key: "winner_id"
has_many :creator, class_name: "User", foreign_key: "creator_id"
end
Room.rb
class Room < ApplicationRecord
belongs_to :winner, class_name: "Room", optional:true
belongs_to :creator, class_name: "Room", optional:true
end
Modelleri oluşturma şeklim:
$ rails g model User username first_name last_name role game_id:integer password
$ rails g model Room rules:text winner:belongs_to creator:belongs_to online:boolean room_id:integer password
Konsolda denediklerim:
deneme = Room.new do |deneme|
deneme.rules = "Deneme"
deneme.password = "a"
deneme.online = true
deneme.room_id = 1
end
deneme.winner_id = User.find_by(role: "player").id
deneme.creator_id = User.find_by(role: "janitor").id
Ekran çıktısı:
home/tuncay/.rvm/gems/ruby-3.0.1/gems/sqlite3-1.4.2/lib/sqlite3/database.rb:147:in `initialize': SQLite3::SQLException: no such table: main.creators (ActiveRecord::StatementInvalid)
home/tuncay/.rvm/gems/ruby-3.0.1/gems/sqlite3-1.4.2/lib/sqlite3/database.rb:147:in `initialize': no such table: main.creators (SQLite3::SQLException)
@sinankeskin aslında hocam sadece members kısmı için belongs_to oluşturmak yerine sizin kodlarınızla beraber bir join_table oluşturdum.Hem bu sayede modeller arası çok-a-çok ilişki kurmuş oldum.
İsteyenler için kodlar:
class User < ApplicationRecord
has_many :creator_rooms, class_name: "Room", foreign_key: "creator_id", dependent: :destroy
has_many :winner_rooms, class_name: "Room", foreign_key: "winner_id", dependent: :destroy
has_and_belongs_to_many :rooms, dependent: :destroy
end