【问题标题】:Can i use a model object directly in a find我可以直接在查找中使用模型对象吗
【发布时间】:2010-05-13 09:12:03
【问题描述】:

我有以下型号:

学生 班级 老师

一个学生可以有多个班级,一个班级可以有 0 或 1 位老师。 我希望能够调用学生的方法来查看他们是否有特定的老师,并返回 true 或 false。

以下代码似乎有效,但我认为它看起来有点啰嗦,必须将每个教师属性与数据库中的属性进行比较。

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,而不是单独指定属性。谢谢

【问题讨论】:

  • “直接传a_teacher”是什么意思? :]
  • 我觉得我应该能够执行以下操作:self.classes.all(:conditions => a_teacher, :joins => :teacher)
  • self 代表哪个类?你到底想用这段代码实现什么?也许有了这些信息,我可以帮助你......
  • 我已经更新了问题,希望这次我提供了足够的信息。

标签: ruby-on-rails activerecord model find


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    我希望能够在 学生看看他们是否有 特定的老师,并返回 true 或 假的。

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

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

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

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

    1. named_scope
    2. searchlogic

    【讨论】:

    • 我没有教师ID,用户输入教师姓名和年龄,然后提交,然后我显示一个特定的学生姓名,以及输入的教师是否是学生教师之一。
    • 您的数据库中有老师。为什么不从学生的输入中查找特定的 ID?如果两个名叫 Bob 的 30 岁年轻人都是老师,会发生什么?
    • 我正在尝试从用户输入中查找特定的 id,如果找到,我会返回 true。如果两者都称为 bob,并且与输入的年龄相同,则返回 true。
    猜你喜欢
    • 2014-08-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-07
    • 2013-05-28
    相关资源
    最近更新 更多