2016-04-04 3 views
0

Я строю текстовую службу, где есть много сообщений, привязанных к одному пользователю. Я бы хотел, чтобы сообщения были проиндексированы в таблицу пользователей через их from_number. Ниже приведено то, что я сделал, но я продолжаю получать ошибку метода.Получение неопределенного метода `принадлежит_to 'для # <ActiveRecord :: Миграция: ошибка

Я две следующие модели определены:

1) message.rb

class Message < ActiveRecord::Base 
    belongs_to :user 
end 

2) User.rb

class User < ActiveRecord::Base 
    has_many :messages 
end 

Ниже файл миграции Пытаюсь для бега через грабли db: migrate:

class UsersMessages < ActiveRecord::Migration 

    def change 
    create_table :users do |t| 
     t.string :user_name 
     t.string :from_number 
     t.timestamps null: false 
    end 

    create_table :messages do |t| 
     t.belongs_to :user, index: true 
     t.string :message_body 
     t.string :from_number 
     t.timestamps null: false 
    end 

    add_index :users, :from_number, :unique => true 
    end 
end 

я получаю следующее сообщение об ошибке:

-- belongs_to(:user) 
-- belongs_to(:user) 
rake aborted! 
NoMethodError: undefined method `belongs_to' for #<ActiveRecord::Migration:0x007ff453826f50> 

Я определяю has_many и belongs_to ассоциаций в модели, но в соответствии с Разделом 2.1 здесь: http://guides.rubyonrails.org/association_basics.html

добавляет «t.belongs_to: клиенты, индекс : true "в файл миграции.

Благодарим за помощь!

+1

Какую версию рельсов вы используете? Запустите 'rails -v' и обновите свой ответ. 'migration_to' в миграциях был добавлен в более поздние версии Rails, поэтому вы можете запускать Rails 3. –

+0

' t.belongs_to: customer, index: true' why': customer'? – 7urkm3n

+0

Какую версию рельсов вы использовали @ philip-cortes просто любопытно? –

ответ

0

Попробуйте использовать t.references :user, index: true в вашей миграции ..

+0

'принадлежит_то' является просто псевдонимом' ссылок', поэтому ОП получит аналогичную ошибку. https://github.com/rails/rails/blob/88aa2efd692619e87eee88dfc48d608bea9bcdb4/activerecord/lib/active_record/connection_adapters/abstract/schema_definitions.rb#L421 –

0

У вас не хватает user_id в таблице сообщений.

Запустить rake db:drop затем удалить из сообщения перемещение этой строки.

t.belongs_to :user, index: true

Выполнить в командной строке:

rails g migration add_user_id_to_messages user_id:interger 

и

rake db:migrate 
+0

Это не отвечает на вопрос ОП. 'Own_to' находится в миграции, а rails использует это для создания user_id для вас. –

+0

Боюсь, что Лео на этом. –

+0

@PhilipCortes просто для удовольствия, можете ли вы комментировать 'own_to: user' строку и перезапустить сервер, чтобы увидеть, все еще имея ту же проблему. – 7urkm3n

0

belongs_to синтаксис миграции был добавлен в Rails 4. Возможно ли вы используете более раннюю версия?

В любом случае, вы можете просто добавить столбец и индекс самостоятельно:

t.integer :user_id, index: true

Смежные вопросы