Rails如何使用除了id列表?

时间:2012-03-09 17:59:22

标签: ruby-on-rails ruby ruby-on-rails-3

示例我的应用程序控制器中有一些ID:

@clicked = %w(32, 18, 13)

在我的控制器中,我有:

@konkurrencer = Konkurrencer.find(:all, :order => 'created_at DESC').paginate(:page => params[:page], :per_page => 5)

如何从@konkurrencer中删除IDS 32,18和13的Konkurrencer?

如何实现konkurrencer的clicked属性(boolean)。例如,如果kon在<% if kon.clicked %>CLICKED<% end %>

中有一个id,那么在循环中可能会@clicked这是真的。

3 个答案:

答案 0 :(得分:2)

您可以使用NOT IN,我已经在没有分页部分的情况下进行了测试,如果有效的话,请尝试让我现在:

@konkurrencer = Konkurrencer.where("id NOT IN(?)", @clicked).order("created_at DESC").paginate(:page => params[:page], :per_page => 5)

确保@clicked变量是一个数组,因为moo太短了。

答案 1 :(得分:0)

您可以使用delete_if

答案 2 :(得分:0)

正如ghr所提到的,你可以使用delete_if但是如果你有一堆id,条件逻辑可能会变长。作为替代方案,但有些昂贵的解决方案,您可以通过构建另一个集合来“减去”目标项目:

 @konkurrencer = Konkurrencer.find(:all, :order => 'created_at DESC') - Konkurrencer.find(32,18,13)