Я работаю над своим первым приложением Rails (3) и собираюсь собрать кучу данных.
Проблема, с которой я столкнулся, заключается в том, что я хочу посеять некоторые модели, имеющие отношение has_and_belongs_to_many, с другими моделями, которые я только что посеял. Я делаю то, что кажется правильным, но я не получаю ожидаемых результатов.
У меня есть модель Asana (упрощенно):
class Asana < ActiveRecord::Base
has_and_belongs_to_many :therapeutic_foci
end
и модель TherapeutFocus:
class TherapeuticFocus < ActiveRecord::Base
has_and_belongs_to_many :asanas
end
В моем db / seed.rb я создаю несколько терапевтических фокусов:
tf = TherapeuticFocus.create([
{:name => 'Anxiety'},
{:name => 'Asthma'},
{:name => 'Fatigue'},
{:name => 'Flat Feet'},
{:name => 'Headache'},
{:name => 'High Blood Pressure'},
{:name => 'Stress'} ])
Затем создайте асану:
asanaCreate = Asana.create!([
{ :english_name => 'Mountain Pose',
:traditional_name => 'Tadasana',
:pronunciation => 'TadaSANA',
:deck_set => 'Basic',
:type => 'Standing',
:therapeutic_foci => TherapeuticFocus.where("name in ('Stress','Flat Feet')")}
])
В результате создаются модели TherapeutFocus, создается Asana, но она не создает связей с моделями TherapeuticFocus. Полученный массив пуст.
Если я бегу
TherapeuticFocus.where("name in ('Stress','Flat Feet')")
в консоли rails я получаю две ожидаемые записи:
irb(main):010:0> TherapeuticFocus.where("name in ('Stress','Flat Feet')")
=> [#<TherapeuticFocus id: 6, name: "Flat Feet", description: nil, created_at: "2010-10-11 01:48:02", updated_at: "2010-10-11 01:48:02">,
#<TherapeuticFocus id: 19, name: "Stress", description: nil, created_at: "2010-10-11 01:48:02", updated_at: "2010-10-11 01:48:02">]
Итак, как это сделать?
Или есть лучший способ сделать это?
Спасибо!
ОТВЕТ НА ПОСТ:
Я уже добавил перегиб:
ActiveSupport::Inflector.inflections do |inflect|
inflect.irregular 'focus', 'foci'
end
Моя миграция для таблиц соединения выглядит так:
create_table :asanas_therapeutic_foci, :id => false do |t|
t.references :asana, :therapeutic_focus
end
Я попробую изменить это значение на t.belongs_to вместо t.references и посмотреть, сработает ли это.