Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Ruby On Rails > Модели, неймспэсы и связи


Автор: XandoX 28.5.2011, 19:31
Здравствуйте
Есть такие миграции

Код

class CreateNsFirsts < ActiveRecord::Migration
  def change

    create_table :ns_firsts do |t|
 
      t.timestamps
    end
  end
end
 
class CreateNsSeconds < ActiveRecord::Migration
  def change
    create_table :ns_seconds do |t|
      t.references :ns_first, :null => false
 
      t.timestamps
    end
    add_index :ns_seconds, :ns_first_id, :unique => true
  end
end


и модели

Код

class Ns::First < ActiveRecord::Base
  has_one :second_model, :class_name => "Ns::Second"
end
 
class Ns::Second < ActiveRecord::Base
  belongs_to :ns_first
end



и при попытке вызвать Ns::First#build_second_model вылетает эксепшен о не известном атрибуте first_id

Код

xandox@stitche /tmp/test_app$ rails console
Loading development environment (Rails 3.1.0.rc1)
irb(main):001:0> f = Ns::First.new
=> #<Ns::First id: nil, created_at: nil, updated_at: nil>
irb(main):002:0> f.second_model
=> nil
irb(main):003:0> f.build_second_model
ActiveRecord::UnknownAttributeError: unknown attribute: first_id
    from /var/lib/gems/1.8/gems/activerecord-3.1.0.rc1/lib/active_record/base.rb:1728:in `assign_attributes'
   from /var/lib/gems/1.8/gems/activerecord-3.1.0.rc1/lib/active_record/base.rb:1722:in `each'
    from /var/lib/gems/1.8/gems/activerecord-3.1.0.rc1/lib/active_record/base.rb:1722:in `assign_attributes'
   from /var/lib/gems/1.8/gems/activerecord-3.1.0.rc1/lib/active_record/associations/singular_association.rb:30:in `build'
    from /var/lib/gems/1.8/gems/activerecord-3.1.0.rc1/lib/active_record/associations/builder/singular_association.rb:33:in `build_second_model'
    from (irb):3
irb(main):004:0>


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

Автор: XandoX 30.5.2011, 18:58
разобрался, помгли ребята с #rubyonrails 
оказываеться для указания refernces для моделий в одном наймспэйсе не надо ставить префикс наэймспэйса, то есть вторая миграция должна выглядить так

Код

class CreateNsSeconds < ActiveRecord::Migration
  def change
    create_table :ns_seconds do |t|
      t.references :first, :null => false
 
      t.timestamps
    end
    add_index :ns_seconds, :ns_first_id, :unique => true
  end
end


Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)