рельсы принадлежат, какой класс выбрать - PullRequest
0 голосов
/ 02 июня 2010

Существует модельное отношение, подобное этому.

class A
belongs_to :ref_config,:class_name => 'User'
end

Мой вопрос: А имеет атрибут с именем flag, теперь я хочу создать такую ​​функцию:

если flag == 1, я хочу, чтобы класс A был таким belongs_to :ref_config,:class_name => 'Department, а если flag == 2, я хочу, чтобы класс A был таким belongs_to :ref_config,:class_name => 'User'

Как я могу реализовать функцию

Спасибо!

Ответы [ 2 ]

2 голосов
/ 02 июня 2010

Посмотрите на полиморфные ассоциации , которые позволят вам использовать одно и то же отношение belongs_to для ссылки на разные модели.

Вы можете настроить свои модели примерно так:

class A < ActiveRecord::Base
  belongs_to :ref_config, :polymorphic => true
end

class Department < ActiveRecord::Base
  has_many :as, :as => :ref_config
end

class User < ActiveRecord::Base
  has_many :as, :as => :ref_config
end

Чтобы настроить необходимые столбцы в таблице A, используйте следующую миграцию:

class CreateAs < ActiveRecord::Migration
  def self.up
    create_table :as do |t|
      t.string :name # or whatever other attributes A should have
      t.references :ref_config, :polymorphic => true
    end
  end

  def self.down
    drop_table :as
  end
end
0 голосов
/ 02 июня 2010

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

class A
  belongs_to :department_config, :class_name => 'Department', :conditions=> flag= 1
  belongs_to :user_config, :class_name => 'User', :conditions=> flag= 2
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...