RailsでscaffoldするとURLの形式はexample.com/posts/:id
になります。
Es kann jedoch vorkommen, dass Sie die ID nicht für einen Parameter verwenden möchten.
今回はexample.com/posts/:uuid
の様な形式でidの代わりにuuidを設定してみました。
Fügen Sie beim Erstellen der Tabelle eine UUID-Spalte hinzu.
$ rails g scaffold post uuid:string body:text
class CreatePosts < ActiveRecord::Migration[6.0]
def change
create_table :posts do |t|
t.string :uuid, null: false
t.text :body
t.timestamps
end
add_index :posts, :uuid
end
end
$ rails db:migrate
config/routes.rb
resources :posts, param: :uuid
#Beim Einstellen nur des Detailbildschirms
# get '/posts/:uuid', to: 'posts#show'
Fügen Sie einen Prozess zum Festlegen der UUID hinzu, bevor Sie die Daten speichern.
app/models/application_record.rb
class ApplicationRecord < ActiveRecord::Base
self.abstract_class = true
private
#hinzufügen
def set_uuid
if self.has_attribute?(:uuid) && self.uuid.blank?
self.uuid = SecureRandom.hex(10)
end
end
end
app/models/post.rb
class Post < ApplicationRecord
#hinzufügen
before_create :set_uuid
end
Wenn Sie so wie es ist auf den Bildschirm zugreifen, tritt ein Fehler auf. Korrigieren Sie daher den Controller.
app/controllers/posts_controller.rb
def set_post
@post = Post.find_by(uuid: params[:uuid])
end
これでexample.com/posts/:uuid
の形式への設定ができました。
Recommended Posts