2

我正在使用 ransack 并且我有一个 Venue 模型,它与阶段(草稿、编辑、完成等)有多对多的关系。

这是我的表格

= search_form_for @q, url: search_admin_venues_path, html: {method: :post} do |f|
  = f.label :name_cont
  = f.text_field :name_cont
  = f.select :stages_id_eq, Stage.all.collect{|c| [c.name, c.id]}, {include_blank: true}

有没有办法搜索不属于所选舞台的场地?即:以某种方式拒绝他们?

这是我使用的洗劫搜索

  def search
    @q = Venue.search(params[:q])
    @venues = @q.result(distinct: true)    
    render :index
  end

这是我以前做的:

stage_obj = Stage.find_by_name(params[:stage])
@venues = Venue.all.includes(:stages).reject{|v| v.stages.include?(stage_obj)}
4

2 回答 2

2

not_eq正如 Viren 在评论中注意到的那样,使用谓词应该可以工作。

= f.select :stages_id_not_eq, Stage.all.collect{|c| [c.name, c.id]}, {include_blank: true}

您还可以使用多个选择输入和in/not_in谓词包含或排除多个值。

于 2013-09-22T12:18:16.080 回答
0

你看过关于 ransack 的railscast视频吗?

于 2013-09-18T18:19:50.460 回答