uuidとは
URLヘルパーにarticleのみ渡したらエラーが出た
describe '記事作成で文章ブロックを追加' do let(:article) { create :article } context '文章を追加せずにプレビューを閲覧' do it '正常に表示される' do visit edit_admin_article_path(article) # article.uuidを渡すと通る click_link 'ブロックを追加する' click_link '文章' click_link 'プレビュー' switch_to_window(windows.second) expect(page).to have_content(article.title), 'プレビューページが正しく表示されていません' end end end end
そもそもuuidって何?
Universally Unique Identifier(ユニバーサリー・ユニーク・アイデンティファイア)
重複しない(ことになっている)IDのこと。
uuidを使う理由は?
URLのidから情報を推測しづらくする
いつも利用している整数のidを用いた場合、URLのidから情報が推測しやすくなってしまう。
https://*****/users/1
のようなURLがあったとして、末尾のidを変えれば別ユーザーのページに行けそうという考えを持たせる要因になってしまう。
このため550e8400-e29b-41d4-a716-446655440000
のような被らない一意の文字列uuidを用いることでURLから情報を推測しづらくすることができる。
注意点
uuidはidの値が乱数になるため、User.firstやUser.lastなどで発行されるSELECT "users".* FROM "users" ORDER BY "users"."id" ASC LIMIT $1
のようなSQLクエリではデータが取得できない。既存のプロジェクトにuuidを導入する場合はorder,first,lastなどが使われていないか確認する。
参考にしたサイト
https://wa3.i-3-i.info/word13163.html