You’re not receiving notifications from this thread.
How do I search Action Text with Ransack?
I have set up a basic search using Ransack but I don't understand how to get it to search Action Text. This is how it is implimented in the search_form_for:
The rcontent is the Action Text portion.
For anyone else searching for this issue, I found a solution.
Add this to your model -
And then add or_action_text_rich_text_body to your search field, because "body" is what is created when the ActionText migration is created.
Thank you! I am now getting duplicates in my searches though. Did that happen to you?
Let's say you have an ActionText field like so:
You can join that without defining another association like so:
One option could be to do a full text search in PostgreSQL:
joins(:rich_text_body).where("to_tsvector(action_text_rich_texts.body) @@ websearch_to_tsquery('english', ?)", phrase)
One of the reasons I went with this approach was to help make the HTML-formatted text a bit easier to search through, and give the user a bit more flexibility. For example, since I used the
websearch_to_tsquery, it supports things like quoting to search for a phrase, etc.
EDIT Heh just noticed this is a rather old thread. Anyway, maybe this will help someone in the future!
I'll share what I did today to solve for this, which is really close to what Ryan did. The model, among other attributes, has a title and a rich text description like so:
I wanted to be able to search across both attributes. I had the title one worked out already but to get the rich text description into the mix I then added the following line:
has_one :description, class_name: 'ActionText::RichText', as: :record
Which then allowed me to do this in the form:
Hope this adds to the help that was already here and thanks to the other folks who contributed to this thread!!
I found this beautiful post from thoughtbot, about this. It @Mylan Connolly solution, going a bit further.
Instead of searching directly in the ActionText
body field, which has HTML tags, it's better to convert that field to plain text, and perform the search in the converted field.
Duplicates in the search result can be removed using the distinct option like so:
@pagy, @discussions = pagy(@q.result(distinct: true))
I second @miguel's recommendation for the post from Thoughtbot. Insanely great implementation!