需要查找列“userlist”包含“current_user.id”的所有“俱乐部”

时间:2013-12-16 01:02:25

标签: ruby-on-rails

我需要找到所有“俱乐部”,其中“userlist”列(包含一组用户ID)包含“current_user.id”。

以下是我试图用来实现此目的的控制器中的代码行: @userclubs = Club.where('userlist in (?)', current_user.id).all

我最终得到一个空数组:[]

这是我在视图中使用的代码: <%= f.association :clubs, :collection => @userclubs, :label_method => :name, :value_method => :name, :as => :check_boxes, :item_wrapper_class => 'inline' %>

如果我将控制器代码更改为@userclubs = Club.all,我会将所有俱乐部作为复选框,但我只希望显示用户所属的俱乐部。

我可能认为这一切都错了,但我是RoR的新手,似乎找不到合适的方法。

1 个答案:

答案 0 :(得分:0)

where方法是SQL上的薄层。你的属性只是Rails眼中的一个数组。从数据库的角度来看,userlist是一个文本字段,您只能将其作为文本字段进行搜索。

虽然搜索序列化结构通常不实用,如Searching serialized data, using active record中所述,在平面数组的情况下,您可以对列进行正则表达式搜索,查找有问题的user_id,注意确保user_id被适当的单独字符包围,如:

userlist rlike ...

其中...是构造的正则表达式,包括?,其中current_user.id的值由相应的单独字符包围。

由于您正在使用Postgres,您可以将列数据类型更改为本机array,但这只是一个微小的改进,如“搜索数组”中http://www.postgresql.org/docs/9.1/static/arrays.html中所述。 / p>

除非你有特殊情况,否则最好使用Rails关联机制存储这样的关系。