如何在ransack上设置字段名的默认条件?

我有一个用户和一个角色模型,两者都通过habtm关联,并且有一个与角色相关的论坛模型。 在论坛的搜索结果搜索表单中,我想要由具有特定角色的用户(按名称:主持人)进行过滤。

来源看起来像这样:

class User  :users_roles rolify class Role  :users_roles belongs_to :resource, :polymorphic => true class Forum  :resource ...  { :class => 'form-horizontal' } do |f| %> ...  User.joins(:roles) .where(:roles => {:name => :moderator}) %> 

是否可以将其组合到字段名称中,我是否需要设置自定义预定的内容或如何使用预设条件(role.name ==:版主)进行搜索?

更新

它看起来像我必须使用自定义的ransacker,我想出了以下内容:

 class Forum  proc { |v| Role.joins(:users).where(:roles => { :name => :moderator, :resource_type => :forum}, :users => {:id => v}).map(&:resource_id) } do |parent| parent.table[:id] end  SimpleForm::FormBuilder do |f| %>  User.joins(:roles) .where(:roles => {:name => :moderator}), ... 

通过上面的解决方法,有一个论坛sql查询和每个用户的查询。 是否可以将此组合并将sql查询设置为以下内容:

 SELECT DISTINCT `forums`.* FROM `forums` LEFT OUTER JOIN `roles` ON `roles`.`resource_id` = `forums`.`id` AND `roles`.`resource_type` = 'Forum' LEFT OUTER JOIN `users_roles` ON `users_roles`.`role_id` = `roles`.`id` LEFT OUTER JOIN `users` ON `users`.`id` = `users_roles`.`user_id` WHERE `roles`.`name` = 'responsible' AND `users`.`id` IN (1,3,6) 

另见: https : //github.com/ernie/ransack/issues/103

我不是100%肯定我得到了这个问题而且它有点老了,但无论如何我都会尝试:

因此,您有要搜索的模型,并且您具有始终要应用的条件。 现在,我想到的第一件事就是控制器中结果的条件,如下所示:

 @q = Forum(params[:q]) @forums = @q.result.where("role_id = ?", 1) # the number of course should be the id of the moderator object 

或者您可以在搜索表单中尝试隐藏字段:

 <%= f.select(:role_name_matches, Role.pluck(:name), :as => :hidden, :input_html => { :value => "moderator" } ) %> 

如果你的意思是别的并且还需要这个答案,请向我解释你的意思。 我有一些搜索经验,并希望提供帮助。