0

i got activeadmin (1.0.0.pre1) working with rails-jquery-autocomplete (1.0.2) [rails-4 setup].

i am able to auto-complete queries and call a search on them; however, when the search returns and the index form reloads, the search box (in sidebar panel) displays queried string wrapped in ["string"] (square braces and quotes)

e.g. if i search with AWonderfulDay and select an auto-completed element, the form reload results in ["AWonderfulDay"] shown as innerText of input element (search box)

Following is the generated UI element

<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">

The search has been implemented using ransack and the filter is:

  filter :comments_in, as: :autocomplete, url: '/comments/autocomplete_comments',
                          label: 'Search Comments', required: false,
                          wrapper_html: {style: "list-style: none"}

pointed to a trivial:

  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

i do know this is because of in predicate (doesn't happen with cont predicate and i have that in another filter working well, e.g. filter :comments_cont will not cause this)

edit 1:

Also, https://github.com/activerecord-hackery/ransack/issues/345 shows a snapshot with same behavior.

This also led me to another question here Custom search with ransacker

i should have done a better job at looking up for them earlier. sorry for that!

edit 2:

here are my model relations:

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
Community
  • 1
  • 1
shwetank
  • 115
  • 3
  • 7

1 Answers1

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'}
shwetank
  • 115
  • 3
  • 7