2015-11-04 7 views
1

У меня есть две модели: Product и Category, которые я хочу связать вместе. Скажите, что у каждого продукта есть уникальная категория, как мне настроить Rails для создания (или генерации) нового объекта Category каждый раз, когда пользователь создает новый объект Product?Создание двух разных объектов (из разных моделей) одновременно - Рельсы

+0

вы хотите создать совершенно новую категорию с каждым новым продуктом ?? – illusionist

+0

Точно. Благодаря! :) – Liroy

+0

Каким должно быть название новой категории? – illusionist

ответ

2
class Product < ActiveRecord::Base 
     after_create do 
     Category.create product: self 
     end 
     has_one :category 
    end 

    class Category < ActiveRecord::Base 
     belongs_to :product 
    end 

и в консоли

> a= Product.create 
> a.category 
=> #<Category id: 1, product_id: 5, created_at: "2015-11-04 12:53:22", updated_at: "2015-11-04 12:53:22"> 
+0

Только то, что мне нужно. Спасибо! – Liroy

2

Прежде всего, если категория относится так много к продукту, почему бы вам не добавить его в модель продукта? Но если вы настаиваете на том, как бы вы его кодировали, вы можете использовать обратные вызовы, такие как after_create, и писать код для создания категории. Таким образом, всякий раз, когда создается продукт, на этом пути будет создана связанная категория.

class Product < ActiveRecord::Base 
    has_one :category 
    after_create :create_category 

    private 
    def create_category 
    # code for creating an associated category 
    end 
end 

Примечания: Большая часть времени, мне нужно сохранить номер мобильного телефона пользователя в базе данных, и каждый пользователь имеет уникальный номер мобильного телефона - так вместо того, чтобы определить новую модель мобильного номера, я, как правило, иметь его внутри таблицы пользователей. Но если информация для мобильного номера расширяется, как его имя оператора, код страны - я бы определенно разделил его на отдельную таблицу.

+1

Пятно на, спасибо за объяснение! – Liroy

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