Я понял это. Мне не хватало href = "#" в моем теге привязки. Он работал нормально в других браузерах, но не Chrome или Safari на IOS. Работает нормально сейчас. Вот окончательный код для всех, кого это интересует:
И рабочий пример здесь: http://www.bootply.com/104147
Наследование одной таблицы! Таким образом, вы можете настроить индивидуальные проверки каждого типа запроса, при этом все запросы будут храниться в одной таблице.
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
на , электронное письмо
или еще много чего, чтобы другой код имел немного больше смысла. Пусть моделью будет маленький черный ящик, который все это скрывает.
Я бы использовал полиморфные ассоциации, которые позволяют модели принадлежать более чем одна другая модель, использующая одну ассоциацию. Примерно так:
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