我想查找其 :has_one 与 :contact_status 关系的值没有值的所有联系人(这是否意味着零?)
我创建了一个alias_attribute :status, :status_contact
我可以做一些类似的事情吗:
contacts = Contact.find(:all, :conditions => {:contact_status => nil }, :include => {:status_contact} )
我不确定 nil 到底是如何工作的。基本上,我没有给它分配任何值,它只是一个 :has_one 关系。
编辑:听起来联系人应该是属于关系,因此进行更改 从评论来看,听起来联系人实际上应该与 status_contacts 具有 own_to 关系,而 status_contacts 又与联系人具有“has_one”关系。
我正在使用 Searchlogic 创建named_scopes...我认为它解决了问题,有人熟悉吗?
但是,有时用户可以为其分配一个值。我不希望这些内容出现在查找结果中。
当前出现此错误:
SQLite3::SQLException:“.”附近:语法错误:SELECT“联系人”。“id”AS t0_r0,“联系人”。“first_name”AS t0_r1,“联系人”。“姓氏” AS t0_r2,“联系人”。“标题” AS t0_r3,“联系人”。“电话” AS t0_r4,“联系人 "."传真"AS t0_r5,"联系人"。"电子邮件"AS t0_r6,"联系人"。"公司"AS t0_r7,"联系人"。"created_at"AS t0 _r8,“联系人”。“updated_at”AS t0_r9,“联系人”。“campaign_id”AS t0_r10,“联系人”。“输入日期”AS t0_ r11,“联系人”.“company_id” AS t0_r12,“联系人”.“address_id” AS t0_r13,“联系人”.“vcard_file_name” AS t0_r14,“联系人”。“vcard_content_type” AS t0_r15,“联系人”。“vcard_file_size” AS t0_r16,“联系人”。“vcar d_updated_at"AS t0_r17,"联系人"。"直接"AS t0_r18,"联系人"。"sugarcrm"AS t0_r19,"status_contacts"。 “id”AS t1_r0,“status_contacts”。“状态”AS t1_r1,“status_contacts”。“contact_id”AS t1_r2,“status_contac” ts"."created_at"AS t1_r3,"status_contacts"."updated_at"AS t1_r4 FROM "联系人"LEFT OUTER JOIN "状态 _contacts"ON status_contacts.contact_id = contact.id WHERE (:status_contact.status = NULL)
最佳答案
您的错误与您显示的代码不符。 我猜你正在做类似的事情
:conditions => ['status = ?', nil]
但是您应该检查的不是状态
,它是链接的对象。这是您在 ruby 代码中检查它的方式,但不是在 sql 中检查它。
在表中,您将有一个名为 status_contact_id
的字段,当该字段为 NULL
(数据库相当于 nil
)时,则没有关系。
所以你确实需要做类似的事情
contacts = Contact.find(:all, :conditions => "status_contact_id IS NULL")
[编辑]由于您使用的是 has_one
关系,请完全阅读该关系,外键确实是在 status_contacts
表中定义的。但是,查询没有任何 status_contacts 的项目会变得有点复杂。
在sql中,你会做类似的事情
select * from contacts where id not in (select contact_id from status_contacts)
我会把它翻译成 ruby,如下所示:
contacts = Contacts.find_by_sql("select * from contacts where id not in (select contact_id from status_contacts)"
就我个人而言,我现在想不出更好的方法。
关于ruby-on-rails - 如何使用哈希 :condition on a . 查找 nil? Rails 中的方法(has_one 关系),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3809750/