我遇到了这种关联的问题。
之前:
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
答案 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用于搜索的“字符串”。但是,再一次,这是一个假设。