私のビジネス ロジックは次のとおりです。多数のユーザーがいます。各ユーザーは、リクエスターまたはワーカーのいずれかになります。
これは私がRailsで実装した方法です。認証にdeviseを使用しています。
class User < ActiveRecord::Base
devise :database_authenticatable, :registerable, :confirmable,
:recoverable, :rememberable, :trackable, :validatable
attr_accessible :name, :email, :password, :password_confirmation, :remember_me, :confirmed_at
has_one :requester
end
これがリクエスタ モデルです。
class Requester < ActiveRecord::Base
attr_accessible :rating
belongs_to :user
has_many :tasks
end
きゅうりでテストしようとしたところ、多数のユーザーを作成するメソッドを定義しました
def create_confirmed_user(name,email,password)
user = User.new(name: name, email: email, password: password, password_confirmation: password, confirmed_at: DateTime.now)
user.skip_confirmation!
user.save
end
そして、ユーザーからリクエスタを作成します
def create_requester_from_user(email, rating)
user = User.find_by_email(email)
requester = Requester.new(rating: rating)
requester.user = user
requester.save
binding.pry #To debug
0
end
pry でデバッグしたところrequester.user
、ユーザーが返されr = Requester.first
たのにr.user
nil が返されたことがわかりました ( r == requester
true が返されることを確認しました)。それは変です。
テストデータベースを準備していないことが問題の原因であると推測して、実行rake db:test:prepare
してチェックしましたが、r.user
まだ nil を返します。
別の質問: このモデルではuser.requester
、このユーザーに属しているリクエスターを取得するために呼び出すことができますか?
もう 1 つの質問は、このビジネス ロジックを適切に実装する方法です。単一テーブル継承 (STI) は適切な選択ですか? 私がグーグルで調べたところ、STIの使用には多くの悪い副作用があることがわかりました.