1

私のビジネス ロジックは次のとおりです。多数のユーザーがいます。各ユーザーは、リクエスターまたはワーカーのいずれかになります。

これは私が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.usernil が返されたことがわかりました ( r == requestertrue が返されることを確認しました)。それは変です。

テストデータベースを準備していないことが問題の原因であると推測して、実行rake db:test:prepareしてチェックしましたが、r.userまだ nil を返します。

別の質問: このモデルではuser.requester、このユーザーに属しているリクエスターを取得するために呼び出すことができますか?

もう 1 つの質問は、このビジネス ロジックを適切に実装する方法です。単一テーブル継承 (STI) は適切な選択ですか? 私がグーグルで調べたところ、STIの使用には多くの悪い副作用があることがわかりました.

4

2 に答える 2

1

ポリモーフィックな関連付けが必要だと思います http://guides.rubyonrails.org/association_basics.html

于 2012-05-09T15:17:24.503 に答える
0

この投稿から問題を把握しました Rails でビルドを使用して has_one 関連付けを使用する: 移行を作成せずにモデルのみを変更しました。belongs_toリクエスター モデルに追加した後、この移行を実行する必要があります: rails generate migration add_user_id_to_requester user_id:integer。多くのドキュメントがこれについて言及していないことに驚いています。

于 2012-05-10T04:08:35.233 に答える