> On Jan 26, 2019, at 5:27 AM, fugee ohu <[email protected]> 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 <[email protected]> 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 [email protected].
> To post to this group, send email to [email protected].
> 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 [email protected].
To post to this group, send email to [email protected].
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.

Reply via email to