На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
  
    > Модели, неймспэсы и связи , Rails 3.1rc1
      Здравствуйте
      Есть такие миграции
      ExpandedWrap disabled
        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

      и модели
      ExpandedWrap disabled
        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
      ExpandedWrap disabled
        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>

      Интуиция подсказывает, что это баг в рельсах, но хотелосьбы быть до конца увереным, что я все делаю правильно, так как в рельсах еще не очень разбираюсь.
        разобрался, помгли ребята с #rubyonrails
        оказываеться для указания refernces для моделий в одном наймспэйсе не надо ставить префикс наэймспэйса, то есть вторая миграция должна выглядить так
        ExpandedWrap disabled
          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
          Сорри за оффтоп - в 3.х наконец-то заработали неймспейсы в моделях?
            deil я честно говоря не знаю как было во вторых, я с 3 начал.
              В 2.3.х не работало :) Падало в неожиданных местах..
                Цитата deil @
                Падало в неожиданных местах..

                Хм а как падоало?
                я просто еще не очень их активно использую (тоснее проект очень медленно развивается), по этому ничего сказать не могу, но было бы интересно узнать, чего можно ожидать от этого?
                  Если у тебя две модели в одном неймспейсе и они связаны ассоциацией - то часто приходилось указывать :class_name => 'namespace:model', ибо AR не понимал что модель стоит искать в текущем неймспейсе. И из-за этого иногда валилось с ошибкой, мол модуль неймспейс:неймспейс:модель - не найдено! В зависимости от того, как ты используешь модель.
                  Вобщем, никакой логики. Для одного случая вызова модели нужно явно указывать неймспейс, для другого - удалять. В итоге оба одновременно работать не будут..
                    deil спасибо, как более мение пойму как это сейчас обязательно отпишусь :)
                    0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                    0 пользователей:


                    Рейтинг@Mail.ru
                    [ Script execution time: 0,0299 ]   [ 15 queries used ]   [ Generated: 7.05.24, 20:04 GMT ]