Как вставить в таблицу many_to_many с помощью активной записи Rails 3 из консоли - PullRequest
3 голосов
/ 06 июля 2011

У меня настроено has_and_belongs_to_many и чтение из таблицы, но я не могу записать в таблицу из консоли rails.

Household.first.appliances [0] = Appliance.first работает, пока я нахожусь в консоли, и когда я сохраняю его, он возвращает true, но фактически не записывает в базу данных.

Я использую удаленную базу данных mysql и могу записывать все остальные таблицы из консоли, но не в many_to_many.Есть идеи как это сделать?

Ответы [ 2 ]

4 голосов
/ 06 июля 2011

Вероятно, гораздо лучше использовать has_many с опцией :through, чем has_and_belongs_to_many, потому что он более гибкий и позволяет избежать осложнений этого разнообразия.

Основное различие между ними заключается в том, что *Версия 1006 * имеет столбец первичного ключа id, поэтому записи являются адресуемыми, и это первоклассная модель, поэтому легко обновлять атрибуты.

Вот пример определения:

class Household < ActiveRecord::Base
  has_many :household_appliances
  has_many :appliances, :through => :household_appliances
end

class HouseholdAppliance < ActiveRecord::Base
  belongs_to :household
  belongs_to :appliance
end

class Appliance < ActiveRecord::Base
  has_many :household_appliances
  has_many :households, :through => :household_appliances
end

Вставить в эту структуру легко и идентично способу has_and_belongs_to_many:

household = Household.first
household.appliances << appliance

household.appliances.count
# => 1

Вам не нужно сохранять такие отношения, как это делается автоматически для вас.Всегда проверяйте вывод в log/development.log, чтобы убедиться, что операторы INSERT представляют записи, которые должны быть созданы.

2 голосов
/ 06 июля 2011
household = Household.first
household.appliances << Appliance.first
household.save

Убедитесь, что вы не используете опцию --sandbox:

rails console

не

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