如何在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" } ) %>
如果你的意思是别的并且还需要这个答案,请向我解释你的意思。 我有一些搜索经验,并希望提供帮助。