2013-08-14 3 views
0

Мне нужно моделировать User и Company. И ассоциация, как:Rails HABTM ассоциация: запись не вставляемая в соединительный стол

class User < ActiveRecord::Base 
    has_and_belongs_to_many :companies 
end 

и

class Company < ActiveRecord::Base 
    has_and_belongs_to_many :users 
end 

В миграции, чтобы создать соединяющую таблицу:

class CreateCompaniesUsers < ActiveRecord::Migration 
def change 
    create_table :companies_users, :id => false do |t| 
    t.references :company 
    t.references :user 

    t.timestamps 
    end 
end 
end 

Это работает нормально, когда:

user = User.new(:name => "name", :email => "[email protected]" :password => "pass") 
user.companies.find_or_create_by_name(:name => "name") 

user.save 

Это не работает, (но вставки данных в users и companies), когда:

user = User.first # or by finding some existing user 
user.companies.find_or_create_by_name(:name => "name") 

Кроме того он показывает сообщение:

Creating scope :page. Overwriting existing method Company.page. 

Пожалуйста, помогите мне выйти из этого. Благодарю.

+0

Возможно, вы использовали неправильный метод, попробуйте 'user.companies.find_or_create_by (: name =>" name ")', вы хотите найти/создать новую компанию принадлежит пользователю с именем компании 'имя'? – Thanh

ответ

0

Вы используете Kaminari для разбивки на страницы? Пожалуйста, ознакомьтесь с этим выпуском: https://github.com/amatsuda/kaminari/issues/48

Существует ряд вопросов такого рода, которые были открыты против Каминари на протяжении многих лет, в том числе на основе использования will_paginate вместе с ним. Все эти проблемы приводят к появлению сообщения «Создание области: страница».

Попробуйте удалить Kaminari из своего gemfile/bundle, а затем повторите попытку.

В качестве альтернативы попробуйте осмотреть новую компанию, созданную вами в user.companies, и убедиться, что она действительна. Файл find_or_create не будет сохранен, если только что созданный объект не прошел проверку.

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