0

RailsでSTIをやりたい。

class AbstractUser < ActiveRecord::Base
  self.table_name = 'users'

  belongs_to :organization, :inverse_of => :users

  # reporter user
  has_many  :requests, :dependent => :destroy

  # startup user
  has_many  :responses, :dependent => :destroy
  has_many  :startup_requests, :through => :responses, :source => :request

  scope :reporters, where(:type => 'Reporter')
  scope :startup_employees, where(:type => 'Startup')
  scope :on_waitlist, where(:waitlist => true)
  scope :not_on_waitlist, where(:waitlist => false)

end

require 'rfc822'

class User < AbstractUser
  devise :database_authenticatable, :registerable,
         :recoverable, :rememberable, :trackable, :confirmable

  validates :name, :presence => true
  validates :surname, :presence => true
  validates :title, :presence => true
  validates :password, :presence => true, :length => { :minimum => 8 }
  validates :email, :presence => true, :format => { :with => RFC822::EMAIL_REGEXP_WHOLE }

  attr_accessible :name, :surname, :title, :organization,
                  :email, :password, :fullname
end

require 'rfc822'

class UserForAdmin < AbstractUser
  validates :email, :presence => true, :format => { :with => RFC822::EMAIL_REGEXP_WHOLE }
  validates :organization_id, :presence => true

  attr_accessible :name, :surname, :title, :organization, :email,
                  :password, :fullname, :password_confirmation, :type, 
                  :organization_id, :waitlist, :invitation_token
end

そして、これらのスコープにはいくつかの問題があります。

Couldn't find UserForAdmin with id=7 [WHERE "users"."type" IN ('UserForAdmin') AND "users"."waitlist" = 'f']

また、同じ結果ではUserForAdminなく、これらのスコープを入れようとしました。AbstractUserActiveAdmin で使用しているため、(おそらく) カスタム メソッドの代わりにスコープが必要です。どうすればこれを解決できますか?

4

1 に答える 1

1

すべてのユーザーを受信したくない場合は、基本クラスでクエリを実行する必要があります。より簡単な例では:

class Animal < ActiveRecord::Base
end

class Dog < Animal
end

class Cat < Animal
end

Dog.create
Cat.create

Animal.all
=> [dog, cat]

Dog.all
=> [dog]

Cat.all
=> [cat]

したがって、あなたの場合、次のことを行います。

AbstractUser.not_on_waitlist.find(params[:id])

このユーザーが の場合UserForAdmin、 class のオブジェクトを受け取りますUserForAdmin。それが単なるユーザーの場合、クラスのオブジェクトを受け取りますUser

于 2013-05-22T14:07:31.810 に答える