2015-11-02 2 views
0

Я пытаюсь придумать способ позволить клиенту добавить себя в категорию. Значение. Я хочу иметь возможность вызывать мои взгляды @ customer.add_to_category (категория) или аналогичные. Какие-либо предложения?Добавление одной модели к другим рельсам

class Category < ActiveRecord::Base 
#Associations 


has_many :customers 

#Defs 
def add_customer(customer_id) 
    current_customer = Customer.find_by(customer_id: customer_id) 
    if current_customer 
     current_customer = Customer.build(customer_id: customer_id) 
    end 
    current_customer 
end 
end 

ответ

2

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

Customer 
    has_many :customer_categories 
    has_many :categories, :through => :customer_categories 

Category 
    has_many :customer_categories 
    has_many :customers, :through => :customer_categories 

CustomerCategory 
    belongs_to :customer 
    belongs_to :category 

Тогда ваш Категория # метод add_customer должен быть просто

def add_customer(customer_id) 
    if customer = Customer.where(id: customer_id).first 
    self.customers << customer unless self.customers.include?(customer) 
    end 
end 

Вы могли бы сделать обратное этого в классе Customer, очевидно.

+0

Вам также понадобится стол. –

+0

Да, поскольку @japed напоминает мне, это общее правило, что при изменении вашей схемы вам может понадобиться миграция, чтобы идти вместе с ней, чтобы добавить необходимые таблицы/столбцы. –

+0

Это было так, как Лирой спросил, нужен ли ему стол в комментарии, который, кажется, уже ушел. –

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