我可以直接在查找中使用模型对象吗?

时间:2010-05-13 09:12:03

标签: ruby-on-rails activerecord model find

我有以下型号:

学生 类 教师

一个学生可以有多个班级,一个班级可以有0或1个教师。 我希望能够在学生上调用一种方法,看看他们是否有特定的老师,并返回真或假。

以下代码似乎有效,但我觉得它看起来有点长,不得不将每个教师属性与数据库中的属性进行比较。

a_teacher = Teacher.new(:name => "Bob", :age => 30)

self.classes.all(:conditions => ["teacher.name = ? AND teacher.age = ?", a_teacher.name,a_teacher.age], :joins => :teacher)

我认为可能有办法将a_teacher传递给find,而不是单独指定属性。感谢

2 个答案:

答案 0 :(得分:0)

我认为你必须像在问题中所写的那样使用它。 ActiveRecord不会以这种方式分析查询字符串来猜测传递对象的实例方法。您应该考虑创建一些named_scope,例如:by_teacher(teacher)如果需要,将按名称和年龄进行搜索。

答案 1 :(得分:0)

  

我希望能够调用方法   学生看他们是否有   具体的老师,并返回true或   假的。

为什么您要按照姓名和年龄来查找老师,而不是老师ID?

self.classes.all(:conditions => ["teacher_id = ?", teacher_student_is_interested_in.id])

您的问题非常难以理解。如果您需要更详细的答案,请发布更多您的模型。

编辑: 鉴于您发布的额外信息,听起来您正在尝试更像搜索的内容。我建议阅读以下内容:

  1. named_scope
  2. searchlogic