2

Ruby on Rails の Mongo を使用し、Mongoid を ORM として使用し、認証用に Devise を使用して、小さなゲーム サーバーを作成しようとしています。db/seeds.rb を変更して、複数のユーザーとゲーム ドキュメントをシードしようとしています。

2 つの Mongo/Mongoid 関係の間にシードを作成するにはどうすればよいですか?

私はUsersGamesを持っています。ユーザーhave_manyゲーム。「embeds_many」と「embedded_in」用のシード データベースを作成する例を見つけましたが、has/beens 用ではありません。これが適切なアーキテクチャである場合のフォローアップになります (「ゲーム」に組み込まれる第 3 のモデル「ターン」があります。

class Game
  include Mongoid::Document
  belongs_to :user
  embeds_many :turns

  field :title, type: String
  field :user_id, type: Integer
  field :current_player, type: Integer
end

class User
  include Mongoid::Document
  has_many :games


  # Include default devise modules. Others available are:
  # :token_authenticatable, :confirmable,
  # :lockable, :timeoutable and :omniauthable
  devise :database_authenticatable, :registerable,
         :recoverable, :rememberable, :trackable, :validatable

  ## Database authenticatable
  field :email,              :type => String, :default => ""
  field :encrypted_password, :type => String, :default => ""

  validates_presence_of :email
  validates_presence_of :encrypted_password

  field :name                 
  validates_presence_of :name
  validates_uniqueness_of :name, :email, :case_sensitive => false
  attr_accessible :name, :email, :password, :password_confirmation, :remember_me
  ...
  ... bunch of fields to support devise gem

終わり

私はこれを機能させるために2つの方法を試しましたが、どちらもデータベースに関係を作成しませんでした:

puts 'EMPTY THE MONGODB DATABASE'
::Mongoid::Sessions.default.drop

puts 'SETTING UP DEFAULT USER LOGIN'
user = User.create! :name => 'First User', :email => 'user@example.com', :password => 'please', :password_confirmation => 'please'
puts 'New user created: ' << user.name

game = Game.create! :title => 'First Game', :user_id => user._id, :current_player => user._id
puts 'New game created: ' << game.title
user.games.push(game)
user.save

game2 = Game.create(:title => 'Foo Game', users: [
  User.create(:name => 'd1', :email => 'd1@example.com', :password => 'd', :password_confirmation => 'd'),
  User.create(:name => 'd2', :email => 'd2@example.com', :password => 'd', :password_confirmation => 'd'),
  User.create(:name => 'd3', :email => 'd3@example.com', :password => 'd', :password_confirmation => 'd')
  ])
puts 'Second game created: ' << game2.title
4

2 に答える 2

1

手動で関係を作成しようとしているようです。field :user_id, type: Integerゲームモデルから 削除して試してくださいuser.games.create!(title: "First Game")

于 2012-08-06T11:53:24.753 に答える
0

belongs_to :gamesGame クラスの代わりに次のコードを追加します。 User クラスを次のように
embedded_in :user, :inverse_of => :game
置き換えます。has_many :games
embeds_many :games

于 2012-08-06T05:35:44.903 に答える