如何使用符号来调用活动记录搜索

时间:2018-08-28 11:43:02

标签: ruby-on-rails-4 rails-activerecord

首先,请原谅可怜的头衔。我知道我想解决的问题,但我认为我没有正确的语言来充分描述问题。

我有一个数据库,每个教学课程可以属于“教科书”或“目标”教学风格。目前,我根据用户的选择将这些信息(“教科书”或“目标”)保存在cookie中。

我提取这些信息,并希望根据值搜索与教科书或目标ID相关的记录。

目前,我有以下代码:

case coursetype
  when "textbook"
    activecourses = Course.find(topicid).textbook_children.where(active: true).order(:id)
    @lessons = Video.joins(:textbook_parent).where('courses.id' => activecourses.pluck(:id)).order(:id)
  else
    activecourses = Course.find(topicid).targeted_children.where(active: true).order(:id)
    @lessons = Video.joins(:targeted_parent).where('courses.id' => activecourses.pluck(:id)).order(:id)
 end

不是很干。

我基本上希望写:

activecourses = Course.find(topicid).targeted_children.where(active: true).order(:id)

targeted_children textbook_children 是某种形式的文本字符串,它变成一个符号(如果正确),但不知道该怎么做。

任何帮助将不胜感激。

对不起,如果我仍然不清楚。

PS。我自学了很多红宝石和铁轨。我敢肯定代码可以用更好的方式编写...我会杀死与可以帮助我改善的人一起工作的...但是...请不要判断!

1 个答案:

答案 0 :(得分:0)

在任何引用符号或字符串的地方,都可以用包含符号或字符串的变量替换。

parent_type = (coursetype == 'textbook' ? :textbook_parent : :targeted_parent)
activecourses = Course.find(topicid).textbook_children.where(active: true).order(:id)
@lessons = Video.joins(parent_type).where('courses.id' => activecourses.pluck(:id)).order(:id)