jQuery,activeadmin:带有搜查的自定义过滤器。如何更改搜索框中显示的文本
jQuery, activeadmin: custom filter with ransack. how to alter displayed text in search box
我得到了 activeadmin (1.0.0.pre1) 使用 rails-jquery-autocomplete (1.0.2) [rails-4 setup].
我能够自动完成查询并调用搜索;但是,当搜索 returns 和索引表单重新加载时,搜索框(在侧边栏面板中)显示用 ["string"] 包裹的查询字符串(方括号和引号)
例如如果我使用 AWonderfulDay
和 select 搜索自动完成的元素,则表单重新加载会导致 ["AWonderfulDay"]
显示为输入元素(搜索框)的 innerText
下面是生成的UI元素
<input data-autocomplete="/comments/autocomplete_comments" id="q_comments_in" name="q[comments_in]" type="text" value="["SearchString"]" class="ui-autocomplete-input" autocomplete="off">
已使用 ransack 实施搜索,过滤器为:
filter :comments_in, as: :autocomplete, url: '/comments/autocomplete_comments',
label: 'Search Comments', required: false,
wrapper_html: {style: "list-style: none"}
指向一个琐碎的:
ransacker :comment,
:formatter => ->(comment) {
data = User.joins(:profile => :comment).where("comments.comment = ?", comment).map(&:id)
data = data.present? ? data: nil
} do |parent|
parent.table[:id]
end
我知道这是因为 in
谓词(不会发生在 cont
谓词中,我在另一个过滤器中运行良好,例如 filter :comments_cont
不会导致这个)
编辑 1:
此外,https://github.com/activerecord-hackery/ransack/issues/345 显示了具有相同行为的快照。
这也让我想到了另一个问题 Custom search with ransacker
我应该早点查找它们。抱歉!
编辑 2:
这是我的模型关系:
class User < ActiveRecord::Base
belongs_to :profile, :inverse_of => :users, :touch => true
class Profile < ActiveRecord::Base
has_one :comment, dependent: :destroy
class Comment < ActiveRecord::Base
belongs_to :profile, touch: true
我通过更正我对 ransack 的使用解决了这个问题。
在models/comment.rb:
scope :search_comment, lambda { |x| ..}
def self.ransackable_scopes(auth_object = nil)
[:search_comment]
end
在admin/profile.rb
filter :search_comment, as: :autocomplete, url: "controller_url",
label: 'Search Comment', required: false,
wrapper_html: {style: 'list-style: none'}
我得到了 activeadmin (1.0.0.pre1) 使用 rails-jquery-autocomplete (1.0.2) [rails-4 setup].
我能够自动完成查询并调用搜索;但是,当搜索 returns 和索引表单重新加载时,搜索框(在侧边栏面板中)显示用 ["string"] 包裹的查询字符串(方括号和引号)
例如如果我使用 AWonderfulDay
和 select 搜索自动完成的元素,则表单重新加载会导致 ["AWonderfulDay"]
显示为输入元素(搜索框)的 innerText
下面是生成的UI元素
<input data-autocomplete="/comments/autocomplete_comments" id="q_comments_in" name="q[comments_in]" type="text" value="["SearchString"]" class="ui-autocomplete-input" autocomplete="off">
已使用 ransack 实施搜索,过滤器为:
filter :comments_in, as: :autocomplete, url: '/comments/autocomplete_comments',
label: 'Search Comments', required: false,
wrapper_html: {style: "list-style: none"}
指向一个琐碎的:
ransacker :comment,
:formatter => ->(comment) {
data = User.joins(:profile => :comment).where("comments.comment = ?", comment).map(&:id)
data = data.present? ? data: nil
} do |parent|
parent.table[:id]
end
我知道这是因为 in
谓词(不会发生在 cont
谓词中,我在另一个过滤器中运行良好,例如 filter :comments_cont
不会导致这个)
编辑 1:
此外,https://github.com/activerecord-hackery/ransack/issues/345 显示了具有相同行为的快照。
这也让我想到了另一个问题 Custom search with ransacker
我应该早点查找它们。抱歉!
编辑 2:
这是我的模型关系:
class User < ActiveRecord::Base
belongs_to :profile, :inverse_of => :users, :touch => true
class Profile < ActiveRecord::Base
has_one :comment, dependent: :destroy
class Comment < ActiveRecord::Base
belongs_to :profile, touch: true
我通过更正我对 ransack 的使用解决了这个问题。
在models/comment.rb:
scope :search_comment, lambda { |x| ..}
def self.ransackable_scopes(auth_object = nil)
[:search_comment]
end
在admin/profile.rb
filter :search_comment, as: :autocomplete, url: "controller_url",
label: 'Search Comment', required: false,
wrapper_html: {style: 'list-style: none'}