저는 사용자와 역할 모델을 가지고 있습니다. 둘 다 habtm을 통해 연결되어 있으며 역할과 관련된 포럼 모델이 있습니다. 포럼에 대한 샅샅이 검색 양식에서 특정 역할 (이름 : 중재자)을 가진 사용자가 필터링하려고합니다. ,어떻게 필드 이름이 ransack 인 기본 조건을 설정합니까?
class User < ActiveRecord::Base
has_and_belongs_to_many :roles, :join_table => :users_roles
rolify
class Role < ActiveRecord::Base
has_and_belongs_to_many :users, :join_table => :users_roles
belongs_to :resource, :polymorphic => true
class Forum < ActiveRecord::Base
has_many :roles, :as => :resource
...
<%= simple_form_for @forums, :html => { :class => 'form-horizontal' } do |f| %>
...
<%= f.input :roles_users_id_in,
:collection => User.joins(:roles)
.where(:roles => {:name => :moderator}) %>
이 가능 필드 이름에이를 결합하는 것입니다 내가 정의 preciated 또는 내가 미리 설정된 조건으로 검색 할 수있는 방법 (role.name =로 설정 뭔가해야합니까 :
소스는 다음과 같습니다 = : 사회자)?
내가 정의 ransacker을 사용하고 난 다음에 와서 같이 업데이트
그것은 seesm : 해결 방법으로
class Forum < ActiveRecord::Base
..
ransacker :moderator_users, :formatter => proc { |v|
Role.joins(:users).where(:roles => { :name => :moderator,
:resource_type => :forum},
:users => {:id => v}).map(&:resource_id)
} do |parent|
parent.table[:id]
end
<%= search_form_for @q, :builder => SimpleForm::FormBuilder do |f| %>
<%= f.input :moderator_users_in,
:collection => 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