jQuery,activeadmin:带有ransack的自定义过滤器。如何更改搜索框中显示的文本

时间:2015-09-22 14:01:57

标签: activeadmin jquery-autocomplete

我使用rails-jquery-autocomplete(1.0.2)[rails-4 setup]的activeadmin(1.0.0.pre1)。

我能够自动完成查询并对其进行搜索;但是,当搜索返回并且索引表单重新加载时,搜索框(在侧边栏面板中)显示包含在["字符串"](方括号和引号)中的查询字符串

e.g。如果我使用AWonderfulDay进行搜索并选择一个自动完成的元素,则表单重新加载会导致["AWonderfulDay"]显示为输入元素的内部文本(搜索框)

以下是生成的UI元素

<input data-autocomplete="/comments/autocomplete_comments" id="q_comments_in" name="q[comments_in]" type="text" value="[&quot;SearchString&quot;]" 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

1 个答案:

答案 0 :(得分:0)

i solved it by correcting my use of ransack.

In models/comment.rb:

scope :search_comment, lambda { |x| ..}

def self.ransackable_scopes(auth_object = nil)
  [:search_comment]
end 

In admin/profile.rb

filter :search_comment, as: :autocomplete, url: "controller_url",
                   label: 'Search Comment', required: false,
                   wrapper_html: {style: 'list-style: none'}