friendly_id4 4.0.0.beta4 → 4.0.0.beta5
Sign up to get free protection for your applications and to get access to all the features.
- data/.yardopts +4 -0
- data/README.md +21 -24
- data/Rakefile +1 -1
- data/friendly_id.gemspec +2 -2
- data/lib/friendly_id.rb +102 -8
- data/lib/friendly_id/base.rb +76 -8
- data/lib/friendly_id/configuration.rb +9 -27
- data/lib/friendly_id/finder_methods.rb +8 -0
- data/lib/friendly_id/history.rb +35 -0
- data/lib/friendly_id/migration.rb +1 -0
- data/lib/friendly_id/object_utils.rb +16 -6
- data/lib/friendly_id/reserved.rb +46 -0
- data/lib/friendly_id/scoped.rb +101 -19
- data/lib/friendly_id/slug.rb +3 -0
- data/lib/friendly_id/slug_sequencer.rb +3 -0
- data/lib/friendly_id/slugged.rb +180 -8
- data/lib/generators/friendly_id_generator.rb +3 -0
- data/test/base_test.rb +23 -0
- data/test/configuration_test.rb +6 -6
- data/test/core_test.rb +3 -11
- data/test/helper.rb +2 -2
- data/test/history_test.rb +9 -9
- data/test/object_utils_test.rb +3 -3
- data/test/reserved_test.rb +26 -0
- data/test/scoped_test.rb +8 -8
- data/test/shared.rb +15 -15
- data/test/slugged_test.rb +30 -20
- metadata +19 -18
- data/Guide.md +0 -363
- data/lib/friendly_id/version.rb +0 -9
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: friendly_id4
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 4.0.0.
|
4
|
+
version: 4.0.0.beta5
|
5
5
|
prerelease: 6
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,12 +9,12 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2011-
|
12
|
+
date: 2011-08-06 00:00:00.000000000 -03:00
|
13
13
|
default_executable:
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: activerecord
|
17
|
-
requirement: &
|
17
|
+
requirement: &70359454075760 !ruby/object:Gem::Requirement
|
18
18
|
none: false
|
19
19
|
requirements:
|
20
20
|
- - ~>
|
@@ -22,10 +22,10 @@ dependencies:
|
|
22
22
|
version: '3.0'
|
23
23
|
type: :development
|
24
24
|
prerelease: false
|
25
|
-
version_requirements: *
|
25
|
+
version_requirements: *70359454075760
|
26
26
|
- !ruby/object:Gem::Dependency
|
27
27
|
name: sqlite3
|
28
|
-
requirement: &
|
28
|
+
requirement: &70359454075180 !ruby/object:Gem::Requirement
|
29
29
|
none: false
|
30
30
|
requirements:
|
31
31
|
- - ~>
|
@@ -33,10 +33,10 @@ dependencies:
|
|
33
33
|
version: '1.3'
|
34
34
|
type: :development
|
35
35
|
prerelease: false
|
36
|
-
version_requirements: *
|
36
|
+
version_requirements: *70359454075180
|
37
37
|
- !ruby/object:Gem::Dependency
|
38
38
|
name: cutest
|
39
|
-
requirement: &
|
39
|
+
requirement: &70359454074720 !ruby/object:Gem::Requirement
|
40
40
|
none: false
|
41
41
|
requirements:
|
42
42
|
- - ~>
|
@@ -44,10 +44,10 @@ dependencies:
|
|
44
44
|
version: 1.1.2
|
45
45
|
type: :development
|
46
46
|
prerelease: false
|
47
|
-
version_requirements: *
|
47
|
+
version_requirements: *70359454074720
|
48
48
|
- !ruby/object:Gem::Dependency
|
49
49
|
name: ffaker
|
50
|
-
requirement: &
|
50
|
+
requirement: &70359454074320 !ruby/object:Gem::Requirement
|
51
51
|
none: false
|
52
52
|
requirements:
|
53
53
|
- - ! '>='
|
@@ -55,10 +55,10 @@ dependencies:
|
|
55
55
|
version: '0'
|
56
56
|
type: :development
|
57
57
|
prerelease: false
|
58
|
-
version_requirements: *
|
58
|
+
version_requirements: *70359454074320
|
59
59
|
- !ruby/object:Gem::Dependency
|
60
60
|
name: maruku
|
61
|
-
requirement: &
|
61
|
+
requirement: &70359454073860 !ruby/object:Gem::Requirement
|
62
62
|
none: false
|
63
63
|
requirements:
|
64
64
|
- - ! '>='
|
@@ -66,10 +66,10 @@ dependencies:
|
|
66
66
|
version: '0'
|
67
67
|
type: :development
|
68
68
|
prerelease: false
|
69
|
-
version_requirements: *
|
69
|
+
version_requirements: *70359454073860
|
70
70
|
- !ruby/object:Gem::Dependency
|
71
71
|
name: yard
|
72
|
-
requirement: &
|
72
|
+
requirement: &70359454073420 !ruby/object:Gem::Requirement
|
73
73
|
none: false
|
74
74
|
requirements:
|
75
75
|
- - ! '>='
|
@@ -77,10 +77,10 @@ dependencies:
|
|
77
77
|
version: '0'
|
78
78
|
type: :development
|
79
79
|
prerelease: false
|
80
|
-
version_requirements: *
|
80
|
+
version_requirements: *70359454073420
|
81
81
|
- !ruby/object:Gem::Dependency
|
82
82
|
name: mocha
|
83
|
-
requirement: &
|
83
|
+
requirement: &70359454072980 !ruby/object:Gem::Requirement
|
84
84
|
none: false
|
85
85
|
requirements:
|
86
86
|
- - ! '>='
|
@@ -88,7 +88,7 @@ dependencies:
|
|
88
88
|
version: '0'
|
89
89
|
type: :development
|
90
90
|
prerelease: false
|
91
|
-
version_requirements: *
|
91
|
+
version_requirements: *70359454072980
|
92
92
|
description: ! " FriendlyId is the \"Swiss Army bulldozer\" of slugging and permalink
|
93
93
|
plugins\n for Ruby on Rails. It allows you to create pretty URL's and work with\n
|
94
94
|
\ human-friendly strings as if they were numeric ids for ActiveRecord models.\n"
|
@@ -100,8 +100,8 @@ extra_rdoc_files: []
|
|
100
100
|
files:
|
101
101
|
- .gemtest
|
102
102
|
- .gitignore
|
103
|
+
- .yardopts
|
103
104
|
- Gemfile
|
104
|
-
- Guide.md
|
105
105
|
- README.md
|
106
106
|
- Rakefile
|
107
107
|
- WhatsNew.md
|
@@ -115,11 +115,11 @@ files:
|
|
115
115
|
- lib/friendly_id/migration.rb
|
116
116
|
- lib/friendly_id/model.rb
|
117
117
|
- lib/friendly_id/object_utils.rb
|
118
|
+
- lib/friendly_id/reserved.rb
|
118
119
|
- lib/friendly_id/scoped.rb
|
119
120
|
- lib/friendly_id/slug.rb
|
120
121
|
- lib/friendly_id/slug_sequencer.rb
|
121
122
|
- lib/friendly_id/slugged.rb
|
122
|
-
- lib/friendly_id/version.rb
|
123
123
|
- lib/generators/friendly_id_generator.rb
|
124
124
|
- test/base_test.rb
|
125
125
|
- test/config/mysql.yml
|
@@ -130,6 +130,7 @@ files:
|
|
130
130
|
- test/helper.rb
|
131
131
|
- test/history_test.rb
|
132
132
|
- test/object_utils_test.rb
|
133
|
+
- test/reserved_test.rb
|
133
134
|
- test/schema.rb
|
134
135
|
- test/scoped_test.rb
|
135
136
|
- test/shared.rb
|
data/Guide.md
DELETED
@@ -1,363 +0,0 @@
|
|
1
|
-
# FriendlyId Guide
|
2
|
-
|
3
|
-
* Table of Contents
|
4
|
-
{:toc}
|
5
|
-
|
6
|
-
## Overview
|
7
|
-
|
8
|
-
FriendlyId is an ORM-centric Ruby library that lets you work with human-friendly
|
9
|
-
strings as if they were numeric ids. Among other things, this facilitates
|
10
|
-
replacing "unfriendly" URL's like:
|
11
|
-
|
12
|
-
http://example.com/states/4323454
|
13
|
-
|
14
|
-
with "friendly" ones such as:
|
15
|
-
|
16
|
-
http://example.com/states/washington
|
17
|
-
|
18
|
-
FriendlyId is typically used with Rails and Active Record, but can also be used in
|
19
|
-
non-Rails applications.
|
20
|
-
|
21
|
-
## Simple Models
|
22
|
-
|
23
|
-
The simplest way to use FriendlyId is with a model that has a uniquely indexed
|
24
|
-
column with no spaces or special characters, and that is seldom or never
|
25
|
-
updated. The most common example of this is a user name or login column:
|
26
|
-
|
27
|
-
class User < ActiveRecord::Base
|
28
|
-
extend FriendlyId
|
29
|
-
validates_format_of :login, :with => /\A[a-z0-9]+\z/i
|
30
|
-
friendly_id :login
|
31
|
-
end
|
32
|
-
|
33
|
-
@user = User.find "joe" # the old User.find(1) still works, too
|
34
|
-
@user.to_param # returns "joe"
|
35
|
-
redirect_to @user # the URL will be /users/joe
|
36
|
-
|
37
|
-
In this case, FriendlyId assumes you want to use the column as-is; it will never
|
38
|
-
modify the value of the column, and your application should ensure that the value
|
39
|
-
is admissible in a URL:
|
40
|
-
|
41
|
-
class City < ActiveRecord::Base
|
42
|
-
extend FriendlyId
|
43
|
-
friendly_id :name
|
44
|
-
end
|
45
|
-
|
46
|
-
@city.find "Viña del Mar"
|
47
|
-
redirect_to @city # the URL will be /cities/Viña%20del%20Mar
|
48
|
-
|
49
|
-
For this reason, it is often more convenient to use Slugs rather than a single
|
50
|
-
column.
|
51
|
-
|
52
|
-
## Slugged Models
|
53
|
-
|
54
|
-
FriendlyId uses a separate column to store slugs for models which require some
|
55
|
-
processing of the friendly_id text. The most common example is a blog post's
|
56
|
-
title, which may have spaces, uppercase characters, or other attributes you
|
57
|
-
wish to modify to make them more suitable for use in URL's.
|
58
|
-
|
59
|
-
class Post < ActiveRecord::Base
|
60
|
-
extend FriendlyId
|
61
|
-
friendly_id :title, :use => :slugged
|
62
|
-
end
|
63
|
-
|
64
|
-
@post = Post.create(:title => "This is the first post!")
|
65
|
-
@post.friendly_id # returns "this-is-the-first-post"
|
66
|
-
redirect_to @post # the URL will be /posts/this-is-the-first-post
|
67
|
-
|
68
|
-
If you are unsure whether to use slugs, then your best bet is to use them,
|
69
|
-
because FriendlyId provides many useful features that only work with this
|
70
|
-
feature. These features are explained in detail {file:Guide.md#features below}.
|
71
|
-
|
72
|
-
## Installation
|
73
|
-
|
74
|
-
gem install friendly_id
|
75
|
-
|
76
|
-
After installing the gem, add an entry in the Gemfile:
|
77
|
-
|
78
|
-
gem "friendly_id", "~> 4.0.0"
|
79
|
-
|
80
|
-
### Future Compatibility
|
81
|
-
|
82
|
-
FriendlyId will always remain compatible with the current release of Rails, and
|
83
|
-
at least one stable release behind. That means that support for 3.0.x will not be
|
84
|
-
dropped until a stable release of 3.2 is out, or possibly longer.
|
85
|
-
|
86
|
-
## Configuration
|
87
|
-
|
88
|
-
FriendlyId is configured in your model using the `friendly_id` method. Additional
|
89
|
-
features can be passing the names of modules into the `:use` option:
|
90
|
-
|
91
|
-
class Post < ActiveRecord::Base
|
92
|
-
extend FriendlyId
|
93
|
-
# use the "title" accessor as the basis of the friendly_id
|
94
|
-
friendly_id :title, :use => [:slugged, :history]
|
95
|
-
end
|
96
|
-
|
97
|
-
Read on to learn about the various features that can be configured. For the
|
98
|
-
full list of valid configuration options, see the instance attribute summary
|
99
|
-
for {FriendlyId::Configuration}.
|
100
|
-
|
101
|
-
# Features
|
102
|
-
|
103
|
-
## FriendlyId Strings
|
104
|
-
|
105
|
-
By default, FriendlyId uses Active Support's Transliterator class to convert strings into
|
106
|
-
ASCII slugs by default. Please see the API docs for
|
107
|
-
[transliterate](http://api.rubyonrails.org/) and
|
108
|
-
[parameterize](http://api.rubyonrails.org/) to see what options are avaialable
|
109
|
-
to you.
|
110
|
-
|
111
|
-
Previous versions of FriendlyId used [Babosa](github.com/norman/babosa) for slug
|
112
|
-
string handling, but the core functionality it provides was extracted from it
|
113
|
-
and added to Rails 3. However, Babosa offers some advanced functionality not
|
114
|
-
offered by Rails and can still be a convenient option. This section shows how
|
115
|
-
you can use it with FriendlyId.
|
116
|
-
|
117
|
-
### Using a Custom Method to Generate the Slug Text
|
118
|
-
|
119
|
-
FriendlyId can use either a column or a method to generate the slug text for
|
120
|
-
your model:
|
121
|
-
|
122
|
-
class City < ActiveRecord::Base
|
123
|
-
extend FriendlyId
|
124
|
-
belongs_to :country
|
125
|
-
friendly_id :name_and_country, :use => :slugged
|
126
|
-
|
127
|
-
def name_and_country
|
128
|
-
#{name} #{country.name}
|
129
|
-
end
|
130
|
-
|
131
|
-
end
|
132
|
-
|
133
|
-
@country = Country.create(:name => "Argentina")
|
134
|
-
@city = City.create(:name => "Buenos Aires", :country => @country)
|
135
|
-
@city.friendly_id # will be "buenos-aires-argentina"
|
136
|
-
|
137
|
-
One word of caution: in the example above, if the country's name were updated,
|
138
|
-
say, to "Argentine Republic", the city's friendly_id would not be
|
139
|
-
automatically updated. For this reason, it's a good idea to avoid using
|
140
|
-
frequently-updated relations as a part of the friendly_id.
|
141
|
-
|
142
|
-
## Using a Custom Method to Process the Slug Text
|
143
|
-
|
144
|
-
If the built-in slug text handling options don't work for your application,
|
145
|
-
you can override the `normalize_friendly_id` method in your model class in
|
146
|
-
order to fine-tune the output:
|
147
|
-
|
148
|
-
class City < ActiveRecord::Base
|
149
|
-
extend FriendlyId
|
150
|
-
friendly_id :whatever, :use => :slugged
|
151
|
-
|
152
|
-
def normalize_friendly_id(text)
|
153
|
-
my_text_modifier_method(text)
|
154
|
-
end
|
155
|
-
|
156
|
-
end
|
157
|
-
|
158
|
-
The `normalize_friendly_id` method takes a single argument and receives an
|
159
|
-
instance of {FriendlyId::SlugString}, a class which wraps a regular Ruby string
|
160
|
-
with additional formatting options.
|
161
|
-
|
162
|
-
### Converting non-Latin characters to ASCII with Babosa
|
163
|
-
|
164
|
-
Babosa offers the ability to idiomatically transliterate non-ASCII characters
|
165
|
-
to ASCII:
|
166
|
-
|
167
|
-
"Jürgen".to_slug.normalize! #=> "Jurgen"
|
168
|
-
"Jürgen".to_slug.normalize! :transliterate => :german #=> "Juergen"
|
169
|
-
|
170
|
-
Using Babosa with FriendlyId is a simple matter of installing and requiring
|
171
|
-
the `babosa` gem, and overriding the `normalize_friendly_id` method in your
|
172
|
-
model:
|
173
|
-
|
174
|
-
class City < ActiveRecord::Base
|
175
|
-
def normalize_friendly_id(text)
|
176
|
-
text.slug.normalize!
|
177
|
-
end
|
178
|
-
end
|
179
|
-
|
180
|
-
## Redirecting to the Current Friendly URL
|
181
|
-
|
182
|
-
FriendlyId can maintain a history of your record's older slugs, so if your
|
183
|
-
record's friendly_id changes, your URL's won't break.
|
184
|
-
|
185
|
-
class Post < ActiveRecord::Base
|
186
|
-
extend FriendlyId
|
187
|
-
friendly_id :title, :use => :history
|
188
|
-
end
|
189
|
-
|
190
|
-
class PostsController < ApplicationController
|
191
|
-
|
192
|
-
before_filter :find_post
|
193
|
-
|
194
|
-
...
|
195
|
-
def find_post
|
196
|
-
return unless params[:id]
|
197
|
-
@post = begin
|
198
|
-
Post.find params[:id]
|
199
|
-
rescue ActiveRecord::RecordNotFound
|
200
|
-
Post.find_by_friendly_id params[:id]
|
201
|
-
end
|
202
|
-
# If an old id or a numeric id was used to find the record, then
|
203
|
-
# the request path will not match the post_path, and we should do
|
204
|
-
# a 301 redirect that uses the current friendly_id
|
205
|
-
if request.path != post_path(@post)
|
206
|
-
return redirect_to @post, :status => :moved_permanently
|
207
|
-
end
|
208
|
-
end
|
209
|
-
end
|
210
|
-
|
211
|
-
## Non-unique Slugs
|
212
|
-
|
213
|
-
FriendlyId will append a arbitrary number to the end of the id to keep it
|
214
|
-
unique if necessary:
|
215
|
-
|
216
|
-
/posts/new-version-released
|
217
|
-
/posts/new-version-released--2
|
218
|
-
/posts/new-version-released--3
|
219
|
-
...
|
220
|
-
etc.
|
221
|
-
|
222
|
-
Note that the number is preceded by "--" rather than "-" to distinguish it from
|
223
|
-
the rest of the slug. This is important to enable having slugs like:
|
224
|
-
|
225
|
-
/cars/peugeot-206
|
226
|
-
/cars/peugeot-206--2
|
227
|
-
|
228
|
-
You can configure the separator string used by your model by setting the
|
229
|
-
`:sequence_separator` option in `friendly_id`:
|
230
|
-
|
231
|
-
friendly_id :title, :use => :slugged, :sequence_separator => ":"
|
232
|
-
|
233
|
-
You can also override the default used in
|
234
|
-
{FriendlyId::Configuration::DEFAULTS} to set the value for any model using
|
235
|
-
FriendlyId. If you change this value in an existing application, be sure to
|
236
|
-
{file:Guide.md#regenerating_slugs regenerate the slugs} afterwards.
|
237
|
-
|
238
|
-
For reasons I hope are obvious, you can't change this value to "-". If you try,
|
239
|
-
FriendlyId will raise an error.
|
240
|
-
|
241
|
-
## Reserved Words
|
242
|
-
|
243
|
-
When you use slugs, FriendlyId adds a validation to avoid using "new" and
|
244
|
-
"index" as slugs. You can control the default reserved words by changing the
|
245
|
-
value in `FriendlyId::Configuration::DEFAULTS[:reserved_words]`.
|
246
|
-
|
247
|
-
## Scoped Slugs
|
248
|
-
|
249
|
-
FriendlyId can generate unique slugs within a given scope. For example, assume
|
250
|
-
you have an application that displays restaurants. Without scoped slugs, if two
|
251
|
-
restaurants are named "Joe's Diner," the second one will end up with
|
252
|
-
"joes-diner--2" as its friendly_id. Using scoped allows you to keep the slug
|
253
|
-
names unique for each city, so that the second "Joe's Diner" can also have the
|
254
|
-
slug "joes-diner", as long as it's located in a different city:
|
255
|
-
|
256
|
-
class Restaurant < ActiveRecord::Base
|
257
|
-
extend FriendlyId
|
258
|
-
belongs_to :city
|
259
|
-
friendly_id :name, :use => :scoped, :scope => :city
|
260
|
-
end
|
261
|
-
|
262
|
-
class City < ActiveRecord::Base
|
263
|
-
extend FriendlyId
|
264
|
-
has_many :restaurants
|
265
|
-
friendly_id :name, :use => :slugged
|
266
|
-
end
|
267
|
-
|
268
|
-
City.find("seattle").restaurants.find("joes-diner")
|
269
|
-
City.find("chicago").restaurants.find("joes-diner")
|
270
|
-
|
271
|
-
|
272
|
-
The value for the `:scope` key in your model can be a column, or the name of a
|
273
|
-
relation.
|
274
|
-
|
275
|
-
### Complications with Scoped Slugs
|
276
|
-
|
277
|
-
#### Finding Records by friendly\_id
|
278
|
-
|
279
|
-
If you are using scopes your friendly ids may not be unique, so a simple find like
|
280
|
-
|
281
|
-
Restaurant.find("joes-diner")
|
282
|
-
|
283
|
-
may return the wrong record. In these cases when you want to use the friendly\_id for queries,
|
284
|
-
either query as a relation, or specify the scope in your query conditions:
|
285
|
-
|
286
|
-
# will only return restaurants named "Joe's Diner" in the given city
|
287
|
-
@city.restaurants.find("joes-diner")
|
288
|
-
|
289
|
-
# or
|
290
|
-
|
291
|
-
Restaurants.find("joes-diner").where(:city_id => @city.id)
|
292
|
-
|
293
|
-
|
294
|
-
#### Finding All Records That Match a Scoped ID
|
295
|
-
|
296
|
-
If you want to find all records with a particular friendly\_id regardless of scope,
|
297
|
-
the easiest way is to use cached slugs and query this column directly:
|
298
|
-
|
299
|
-
Restaurant.find_all_by_slug("joes-diner")
|
300
|
-
|
301
|
-
### Routes for Scoped Models
|
302
|
-
|
303
|
-
Note that FriendlyId does not set up any routes for scoped models; you must do
|
304
|
-
this yourself in your application. Here's an example of one way to set this up:
|
305
|
-
|
306
|
-
# in routes.rb
|
307
|
-
resources :cities do
|
308
|
-
resources :restaurants
|
309
|
-
end
|
310
|
-
|
311
|
-
# in views
|
312
|
-
<%= link_to 'Show', [@city, @restaurant] %>
|
313
|
-
|
314
|
-
# in controllers
|
315
|
-
@city = City.find(params[:city_id])
|
316
|
-
@restaurant = @city.restaurants.find(params[:id])
|
317
|
-
|
318
|
-
# URL's:
|
319
|
-
http://example.org/cities/seattle/restaurants/joes-diner
|
320
|
-
http://example.org/cities/chicago/restaurants/joes-diner
|
321
|
-
|
322
|
-
|
323
|
-
# Misc tips
|
324
|
-
|
325
|
-
## Default Scopes
|
326
|
-
|
327
|
-
Whether you're using FriendlyId or not, a good rule of thumb for default scopes
|
328
|
-
is to always use your model's table name. Otherwise any time you do a join, you
|
329
|
-
risk having queries fail because of duplicate column names - particularly for a
|
330
|
-
default scope like this one:
|
331
|
-
|
332
|
-
default_scope :order => "created_at DESC"
|
333
|
-
|
334
|
-
Instead, do this:
|
335
|
-
|
336
|
-
default_scope :order => = "#{quoted_table_name}.created_at DESC"
|
337
|
-
|
338
|
-
Or even better, unless you're using a custom primary key:
|
339
|
-
|
340
|
-
default_scope :order => = "#{quoted_table_name}.id DESC"
|
341
|
-
|
342
|
-
because sorting by a unique integer column is faster than sorting by a date
|
343
|
-
column.
|
344
|
-
|
345
|
-
## Some Benchmarks
|
346
|
-
|
347
|
-
These benchmarks can give you an idea of FriendlyId's impact on the
|
348
|
-
performance of your application. Of course your results may vary.
|
349
|
-
|
350
|
-
activerecord (3.0.9)
|
351
|
-
ruby 1.9.2p180 (2011-02-18 revision 30909) [x86_64-darwin10.6.0]
|
352
|
-
friendly_id (4.0.0.beta1)
|
353
|
-
sqlite3 (1.3.3) gem
|
354
|
-
sqlite3 3.6.12 in-memory database
|
355
|
-
|
356
|
-
|
357
|
-
user system total real
|
358
|
-
find (without FriendlyId) 0.300000 0.000000 0.300000 ( 0.306729)
|
359
|
-
find (in-table slug) 0.350000 0.000000 0.350000 ( 0.351760)
|
360
|
-
find (external slug) 3.320000 0.000000 3.320000 ( 3.326749)
|
361
|
-
insert (without FriendlyId) 0.810000 0.010000 0.820000 ( 0.810513)
|
362
|
-
insert (in-table-slug) 1.740000 0.000000 1.740000 ( 1.743511)
|
363
|
-
insert (external slug) 3.540000 0.010000 3.550000 ( 3.544898)
|