我正在使用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)}
答案 0 :(得分:2)
使用not_eq
谓词应该可行,正如Viren在评论中注意到的那样。
= f.select :stages_id_not_eq, Stage.all.collect{|c| [c.name, c.id]}, {include_blank: true}
您还可以使用多个选择输入和in
/ not_in
谓词来包含或排除多个值。
答案 1 :(得分:0)
您是否在搜索过的情况下看过railscast视频?