Ruby on Rails Saturday, January 26, 2019

> On Jan 26, 2019, at 5:27 AM, fugee ohu <fugee279@gmail.com> wrote:
>
>
>
> On Friday, January 25, 2019 at 9:06:22 AM UTC-5, Walter Lee Davis wrote:
>
> > On Jan 25, 2019, at 6:00 AM, fugee ohu <fuge...@gmail.com> wrote:
> >
> > I wanna convert my news stories to use slug urls based on the :headline column instead of id's but some of the rows contain special characters like double quotes, exclamation points, do I need to gsub those out
>
> An interesting theory, but FriendlyId already does this, quite elaborately. The logic that does the "dumbification" is delegated to ActiveSupport's parameterize method, which takes everything not-ASCII and transliterates it into ASCII, and replaces any run of whitespace with a single dash, and removes punctuation. Next, the slug is checked for duplicates with any existing record, and a UUID is appended if so. It's really quite well done and very settled code. I have been using FriendlyId for 8 years or more without encountering any error that wasn't my own mistake.
>
> In another of your many threads, you mention that you are trying to create a slug out of the article's text, rather than the headline (as the documentation encourages). You may want to try starting from a truncated copy of the article text (or even following the directions) before you assume that FriendlyId is at fault here. I doubt that your article text will fit into the size constraints of a URL segment, particularly if you worry about IE users seeing the thing at all*'
>
> Walter
>
> *The entire URL, including prefix, host, port, and path, must be no more than 1,024 characters ASCII in order to be visited by IE.
>
>
> So I have to change the length of the varchar field and the length of the index as well?

I don't know what your schema looks like right now. Here's how I have always used FriendlyID:

1. I have a `title` column, normal string, 255 characters limit. The client or user can enter whatever she wants up to that limit.
2. I use the FriendlyID migration generator to create the slug column on my model.
3. I configure FriendlyID according to the instructions (extend, then friendly_id :title, use: :slugged in the model).
4. Profit.

There's really nothing else needed except changing find to friendly.find in the controller.

I don't give the client/user the ability to create a too-long slug, by starting from a source text that is short enough.

If you wanted to start from the article text (say, a true text field of thousands of characters), I would start by trimming that text down to the first couple hundred characters. And then, because slugs must be unique, I would imagine you would have quite a few natural collisions, and might end up with a fair amount of disambiguated slugs that end in UUID-shaped garbage strings.

I believe that FriendlyId has the ability to call methods (rather than being bound to just the actual database columns) when calculating the slug, so you could start from `article_body` (a text column, tens of thousands of characters or a clob) and then limit that with truncate or another string-splitting method, like this:

(in your model)

friendly_id :article_preview, use: :slugged

def article_preview
# cut off at 200 characters, without an ellipsis
article_text.truncate(200, '')
end

Does that make sense?

Walter

>
> --
> You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group.
> To unsubscribe from this group and stop receiving emails from it, send an email to rubyonrails-talk+unsubscribe@googlegroups.com.
> To post to this group, send email to rubyonrails-talk@googlegroups.com.
> To view this discussion on the web visit https://groups.google.com/d/msgid/rubyonrails-talk/0d80957a-d522-4f30-9aeb-a355ea132b0b%40googlegroups.com.
> For more options, visit https://groups.google.com/d/optout.

--
You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group.
To unsubscribe from this group and stop receiving emails from it, send an email to rubyonrails-talk+unsubscribe@googlegroups.com.
To post to this group, send email to rubyonrails-talk@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/rubyonrails-talk/CDC664B7-5E11-404B-A1AA-1F0B35E3D1F5%40wdstudio.com.
For more options, visit https://groups.google.com/d/optout.

No comments:

Post a Comment