0

我遇到了这个协会的问题。

前:

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

目前属性“role”不再是字符串,现在是一个数组,所以我需要更改导致“角色”为['owner'](不是'owner')的记录的条件,但我不能使用数组比赛。

通缉:

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
4

2 回答 2

1

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

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

has_many  :memberships, class_name: 'Profile', conditions: "profiles.role not in ('owner')"
于 2013-05-30T18:02:12.447 回答
0

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

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

使用 arel:

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

结果:

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

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

于 2013-05-31T14:57:55.993 回答