Ruby Rails: has_many, автоматическая настройка столбца - PullRequest
2 голосов
/ 06 мая 2010

Учитывая следующий код Ruby-on-Rails (1.8.6, 2.3.5):

class MyClass < ActiveRecord::Base
  has_many :modifiers,
    :conditions => ["affects_class = ?", self.name],
    :foreign_key => :affects_id
end

Я пытаюсь автоматически установить для столбца affects_class значение 'MyClass'. Другими словами:

myInstance = MyClass.find(:first)
modifier = Modifier.new
modifier.affects_class = self.name # Don't want to have to do this
myInstance.modifiers << modifier

Я не хочу устанавливать modifier.affects_class. В конце концов, мне не нужно устанавливать modifier.affects_id; это устанавливается автоматически отношением has_many. Есть ли какая-нибудь опция, которую я могу установить на has_many? Или я застрял, чтобы установить его каждый раз?

1 Ответ

4 голосов
/ 06 мая 2010

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

railsapi.doc говорит следующее о опции :conditions для отношения has_many:

[...] Запись творений из ассоциация ограничена, если хеш используемый. has_many: сообщения,: условия => {: опубликовано => правда} создаст опубликованные сообщения с @ blog.posts.create или @ Blog.posts.build.

Итак, если вы задали условие, используя хэш

class MyClass < ActiveRecord::Base
   has_many :modifiers,
      :conditions => {:affects_class => self.name},
      :foreign_key => :affects_id
end

и создайте modifiers, используя

myInstance = MyClass.find(:first)
myInstance.modifiers.create #or myInstance.modifiers.build

Вы не получите модификаторы с уже заданным именем?

Я просто не очень уверен в использовании self.name. Я не знаю, является ли это правильным способом получить имя класса.

В любом случае, дайте мне знать, если это работает. Это ново для меня и очень полезно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...