+2
Gemfile
+2
Gemfile
+3
Gemfile.lock
+3
Gemfile.lock
···
112
112
warden (~> 1.2.3)
113
113
drb (2.2.1)
114
114
erubi (1.12.0)
115
+
friendly_id (5.5.1)
116
+
activerecord (>= 4.0.0)
115
117
globalid (1.2.1)
116
118
activesupport (>= 6.1)
117
119
i18n (1.14.4)
···
272
274
capybara
273
275
debug
274
276
devise
277
+
friendly_id (~> 5.5.0)
275
278
importmap-rails
276
279
jbuilder
277
280
paperclip (~> 5.1.0)
+2
-1
app/controllers/articles_controller.rb
+2
-1
app/controllers/articles_controller.rb
···
3
3
4
4
def index
5
5
@article = Article.all
6
+
@tags = Tag.all
6
7
@profiles = Profile.all
7
8
respond_to do |format|
8
9
format.html
···
57
58
58
59
private
59
60
def article_params
60
-
params.require(:article).permit(:title, :body, :status, :icon, :all_tags)
61
+
params.require(:article).permit(:title, :body, :status, :icon, :tag_id)
61
62
end
62
63
end
+1
-1
app/models/article.rb
+1
-1
app/models/article.rb
+3
-3
app/models/tag.rb
+3
-3
app/models/tag.rb
+2
-2
app/views/articles/_form.html.erb
+2
-2
app/views/articles/_form.html.erb
-2
app/views/articles/show.html.erb
-2
app/views/articles/show.html.erb
+107
config/initializers/friendly_id.rb
+107
config/initializers/friendly_id.rb
···
1
+
# FriendlyId Global Configuration
2
+
#
3
+
# Use this to set up shared configuration options for your entire application.
4
+
# Any of the configuration options shown here can also be applied to single
5
+
# models by passing arguments to the `friendly_id` class method or defining
6
+
# methods in your model.
7
+
#
8
+
# To learn more, check out the guide:
9
+
#
10
+
# http://norman.github.io/friendly_id/file.Guide.html
11
+
12
+
FriendlyId.defaults do |config|
13
+
# ## Reserved Words
14
+
#
15
+
# Some words could conflict with Rails's routes when used as slugs, or are
16
+
# undesirable to allow as slugs. Edit this list as needed for your app.
17
+
config.use :reserved
18
+
19
+
config.reserved_words = %w[new edit index session login logout users admin
20
+
stylesheets assets javascripts images]
21
+
22
+
# This adds an option to treat reserved words as conflicts rather than exceptions.
23
+
# When there is no good candidate, a UUID will be appended, matching the existing
24
+
# conflict behavior.
25
+
26
+
# config.treat_reserved_as_conflict = true
27
+
28
+
# ## Friendly Finders
29
+
#
30
+
# Uncomment this to use friendly finders in all models. By default, if
31
+
# you wish to find a record by its friendly id, you must do:
32
+
#
33
+
# MyModel.friendly.find('foo')
34
+
#
35
+
# If you uncomment this, you can do:
36
+
#
37
+
# MyModel.find('foo')
38
+
#
39
+
# This is significantly more convenient but may not be appropriate for
40
+
# all applications, so you must explicitly opt-in to this behavior. You can
41
+
# always also configure it on a per-model basis if you prefer.
42
+
#
43
+
# Something else to consider is that using the :finders addon boosts
44
+
# performance because it will avoid Rails-internal code that makes runtime
45
+
# calls to `Module.extend`.
46
+
#
47
+
# config.use :finders
48
+
#
49
+
# ## Slugs
50
+
#
51
+
# Most applications will use the :slugged module everywhere. If you wish
52
+
# to do so, uncomment the following line.
53
+
#
54
+
# config.use :slugged
55
+
#
56
+
# By default, FriendlyId's :slugged addon expects the slug column to be named
57
+
# 'slug', but you can change it if you wish.
58
+
#
59
+
# config.slug_column = 'slug'
60
+
#
61
+
# By default, slug has no size limit, but you can change it if you wish.
62
+
#
63
+
# config.slug_limit = 255
64
+
#
65
+
# When FriendlyId can not generate a unique ID from your base method, it appends
66
+
# a UUID, separated by a single dash. You can configure the character used as the
67
+
# separator. If you're upgrading from FriendlyId 4, you may wish to replace this
68
+
# with two dashes.
69
+
#
70
+
# config.sequence_separator = '-'
71
+
#
72
+
# Note that you must use the :slugged addon **prior** to the line which
73
+
# configures the sequence separator, or else FriendlyId will raise an undefined
74
+
# method error.
75
+
#
76
+
# ## Tips and Tricks
77
+
#
78
+
# ### Controlling when slugs are generated
79
+
#
80
+
# As of FriendlyId 5.0, new slugs are generated only when the slug field is
81
+
# nil, but if you're using a column as your base method can change this
82
+
# behavior by overriding the `should_generate_new_friendly_id?` method that
83
+
# FriendlyId adds to your model. The change below makes FriendlyId 5.0 behave
84
+
# more like 4.0.
85
+
# Note: Use(include) Slugged module in the config if using the anonymous module.
86
+
# If you have `friendly_id :name, use: slugged` in the model, Slugged module
87
+
# is included after the anonymous module defined in the initializer, so it
88
+
# overrides the `should_generate_new_friendly_id?` method from the anonymous module.
89
+
#
90
+
# config.use :slugged
91
+
# config.use Module.new {
92
+
# def should_generate_new_friendly_id?
93
+
# slug.blank? || <your_column_name_here>_changed?
94
+
# end
95
+
# }
96
+
#
97
+
# FriendlyId uses Rails's `parameterize` method to generate slugs, but for
98
+
# languages that don't use the Roman alphabet, that's not usually sufficient.
99
+
# Here we use the Babosa library to transliterate Russian Cyrillic slugs to
100
+
# ASCII. If you use this, don't forget to add "babosa" to your Gemfile.
101
+
#
102
+
# config.use Module.new {
103
+
# def normalize_friendly_id(text)
104
+
# text.to_slug.normalize! :transliterations => [:russian, :latin]
105
+
# end
106
+
# }
107
+
end
+6
-9
config/routes.rb
+6
-9
config/routes.rb
···
1
1
Rails.application.routes.draw do
2
-
get 'tags/index'
3
-
get 'tags/create'
4
-
resources :galleries
5
2
# Define your application routes per the DSL in https://guides.rubyonrails.org/routing.html
6
3
7
4
# Reveal health status on /up that returns 200 if the app boots with no exceptions, otherwise 500.
···
13
10
end
14
11
15
12
Rails.application.routes.draw do
16
-
get 'tags/index'
17
-
get 'tags/create'
18
13
get "/tags", to: "tags#index"
14
+
# get "tags/:edit" => "tags#edit", as: :edit_tag_path
19
15
get "tags/:id" => "tags#show", as: :tag
16
+
get "tags/:new" => "tags#new"
17
+
# resources :tag, path: '', only: [:show]
18
+
resources :tags
19
+
end
20
20
21
-
resources :galleries
21
+
Rails.application.routes.draw do
22
22
get "/articles", to: "articles#index"
23
-
# get 'tags/:tag', to: 'articles#index', as: "tag"
24
23
# For details on the DSL available within this file, see https://guides.rubyonrails.org/routing.html
25
24
end
26
25
27
26
Rails.application.routes.draw do
28
-
resources :galleries
29
27
get "/users", to: "users#index", via: "get"
30
28
end
31
29
32
30
Rails.application.routes.draw do
33
-
resources :galleries
34
31
root "articles#index"
35
32
36
33
resources :profiles