Rails与数组的关联条件

时间:2013-05-30 17:26:22

标签: ruby-on-rails

我遇到了这种关联的问题。

之前:

has_many  :membership, class_name: 'Profile', conditions: "profiles.role != 'owner'"

目前属性“role”不再是一个字符串,现在是一个数组,所以我需要改变那个条件,导致其“角色”是['所有者']的记录(不是'所有者'),但我不能告诉我们匹配的数组。

想:

has_many  :memberships, class_name: 'Profile', conditions: "profiles.role != ['owner']"

个人资料模型

class Profile < ActiveRecord::Base
  attr_accessible :role

  serialize :role, Array
  belongs_to :account

  def roles?(role)
    role.include?(role)
  end
end

2 个答案:

答案 0 :(得分:1)

角色列在数据库中的外观如何?它是一个字符串吗?

如果是varchar列,那么下面的代码应该可以工作。

has_many  :memberships, class_name: 'Profile', conditions: "profiles.role not in ('owner')"

答案 1 :(得分:0)

我找到了解决方案。正确的查询是:

`profiles`.`role` NOT LIKE '%owner%'

使用arel:

Profile.arel_table[:role].does_not_match('%owner%').to_sql

结果:

profiles`.`role` NOT LIKE '%owner%

我想即使列型“string”序列化,这仍然是sql用于搜索的“字符串”。但是,再一次,这是一个假设。