0

我有以下方法:

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等号选择要调用的模型?

4

2 回答 2

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
于 2013-02-28T08:30:59.977 回答
0

你还没有关闭你的“if - elsif - else 条件,那么最后一个带有 find 的块,find_by_id 和你的 new 仅在 type == 'D' 时执行。

在后面插入一个结尾

db = Tic
于 2013-02-28T08:31:03.627 回答