Giter VIP home page Giter VIP logo

Comments (6)

benhamill avatar benhamill commented on May 31, 2024

Yep. As explained in the README, certain characters have special meaning for advanced_search. You might find the full docs useful, but colon is one of them.

You probably want basic_search.

from textacular.

michaelrkn avatar michaelrkn commented on May 31, 2024

Right, that makes sense, but is letting an exception bubble up to the user really the right way to handle this? If the user inputs an invalid search, it makes more sense to me to just to return an empty AR relation, rather than raising an exception and breaking the app. Or at the very least, the README should be clear that anybody using advanced_search should be sure to catch the exception and display an error telling the user their syntax was invalid.

from textacular.

benhamill avatar benhamill commented on May 31, 2024

Re-implementing the syntax checking that Postgres does on tsquery (or tsvector and whatever else) doesn't seem like a good idea. An empty AR relation seems like we're saying "none found" which is quite different from "you sent in something unexpected". nil seems like a bad idea for the same reasons. I'm open to the idea of returning something else, but almost anything I can think of would be large equivalent to raising an exception, since it wouldn't behave in a safe manner.

Would it be better to wrap this exception (probably and inspect the message to make sure it is, indeed, an error related to searching) in a new exception scoped to Textacular? Note: ActiveRecord its self just passes this exception through... if you do something like Lesson.where('wggw weg weg egw gwe gwe') you should get the same PG::SyntaxError, not an empty AR relation or an AR-scoped exception.

from textacular.

michaelrkn avatar michaelrkn commented on May 31, 2024

I don't know enough about this stuff to have an opinion on the correct type of exception. But I'll definitely open a PR to update the README with a warning to other folks using advanced_search that they should catch exceptions for invalid syntax and display a nicer error to their users.

from textacular.

benhamill avatar benhamill commented on May 31, 2024

I guess--to me, advanced search implies that you know what you're doing in terms of what Postgres supports for tsquery. If you're putting user input directly in there, that's almost certainly a mistake. If you're taking some search DSL you made up for your users and translating it to PG's syntax, that's the ideal use for advanced_search. If you want to stick user input directly into a search function, that is what basic_search is for.

If your concern is user-facing errors, can you touch on that in your PR, too? Advanced search is meant for advanced usage... (I have yet to use this gem in a way that basic search wasn't the best option for, personally).

from textacular.

ecin avatar ecin commented on May 31, 2024

Well put @benhamill. I don't think there's a good alternative to the exception the Postgres adapter raises.

@michaelrkn, more documentation is great, thanks for writing that up.

from textacular.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.