2013-02-28 2 views
0

У меня есть следующий метод:Rails на основе условий Назначают модели переменной

def self.get_rec(product, type) 
    if type == "A" 
    db = Pwvav 
    elsif type == "B" 
    db = Pwbab 
    elsif type == "C" 
    db = Pwvub 
    else type == "D" 
    db = Tic 
    db.find_by_id(product.id).recommendation.split(",").each do |rec| 
     r = Recommendation.find_by_id(rec) 
     pr = Model.new(:rating_set => rating_set.id, :recommendation_id => r.id, :product_id => product.id) 
     pr.save 
    end 
    end 
end 

Когда я запускаю метод, то db.find не работает, как я ожидал. Если, например, заменить db.find_by_id(product.id).recommendation.split(",").each do |rec| на Pwvav.find_by_id(product.id).recommendation.split(",").each do |rec|, он работает. Как выбрать, какую модель вызывать, исходя из того, что равно type?

+0

что ваша ошибка –

+0

я не получаю ошибку, 'pr' не создается. Кроме того, если я напечатать что-то после того, как если/ELSIF него – Yogzzz

+0

"Модель" есть название модели? –

ответ

1

ваша ошибка, если я прав, с вашей структурой. код find_by_id находится внутри else, поэтому он не создает другие записи, когда тип не является «D». Попробуйте следующий код, который я считаю более удобным для чтения

def self.get_rec(product, type) 
    db = case type 
     when 'A' then Pwvav 
     when 'B' then Pwbab 
     when 'C' then Pwvub 
     when 'D' then Tic 
     end 

    db.find_by_id(product.id).recommendation.split(",").each do |rec| 
    r = Recommendation.find_by_id(rec) 
    pr = Model.new(rating_set: rating_set.id, recommendation_id: r.id, product_id => product.id) 
    pr.save 
    end 
end 
0

Вы не закрыть свой «, если - ELSIF - остальное состояние, то последний блок с находку, find_by_id и ваш новый только выполняется, когда тип == «D».

Вставьте конец после

db = Tic 
Смежные вопросы