Альтернативы для использования полиморфизма в Ruby on Rails

Я понял это. Мне не хватало href = "#" в моем теге привязки. Он работал нормально в других браузерах, но не Chrome или Safari на IOS. Работает нормально сейчас. Вот окончательный код для всех, кого это интересует:

  

И рабочий пример здесь: http://www.bootply.com/104147

8
задан Jakub Troszok 29 May 2009 в 14:28
поделиться

2 ответа

Наследование одной таблицы! Таким образом, вы можете настроить индивидуальные проверки каждого типа запроса, при этом все запросы будут храниться в одной таблице.

class CreateUserRequests < ActiveRecord::Migration
  def self.up
    create_table :user_requests do |t|
      t.string :string_data, :type
      t.integer :user_id, :integer_data
      t.timestamps
    end
  end
  def self.down
    drop_table :user_requests
  end
end


class UserRequest < ActiveRecord::Base
  belongs_to :user
end

class EmailAliasRequest < UserRequest
  validates_presence_of :string_data
  validates_format_of :string_data, :with => EMAIL_REGEX
end

class ProgramInstallRequest < UserRequest
  belongs_to :program, :class_name => "Program", :foreign_key => "integer_data"
  validates_presence_of :integer_data
end

class QuotaIncreaseRequest < UserRequest
  validates_presence_of :string_data
  validates_inclusion_of :string_data, :in => %w( 1GB 5GB 10GB 15GB )
end

И, конечно же, укажите псевдонимы ваших string_data и integer_data на , электронное письмо или еще много чего, чтобы другой код имел немного больше смысла. Пусть моделью будет маленький черный ящик, который все это скрывает.

8
ответ дан 5 December 2019 в 17:40
поделиться

Я бы использовал полиморфные ассоциации, которые позволяют модели принадлежать более чем одна другая модель, использующая одну ассоциацию. Примерно так:

class AdminRequest < ActiveRecord::Base
  belongs_to :user
  belongs_to :requestable, :polymorphic => true
end

class EmailAlias < ActiveRecord::Base
  has_many :admin_requests, :as => :requestable
end

class ProgramInstall < ActiveRecord::Base
  has_many :admin_requests, :as => :requestable
end

class QuotaIncrease < ActiveRecord::Base
  has_many :admin_requests, :as => :requestable
end
  • Как всегда, у Райана Бейтса есть отличный Railscast по этой теме.
2
ответ дан 5 December 2019 в 17:40
поделиться
Другие вопросы по тегам:

Похожие вопросы: