質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Q&A

解決済

2回答

4009閲覧

"重複のないことが保証されている、他者から推測されにくい値"を生成し、新しいURLとして設定する方法

hanzoo

総合スコア28

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

0グッド

2クリップ

投稿2016/09/08 18:33

編集2016/09/09 06:20

##背景
RailsのScaffoldを利用し、テキストの共同編集が出来るWebサービスを作ろうとしています。

##質問
必要な項目を入力し、Create Question で新しい質問を作成後、
http://localhost:3000/questions/他者から推測されにくい値
へ、アクセス出来るようにしたいです。
また、他者から推測されにくい値は、重複のないことが保証された値である必要があります。

他者から推測されにくい値を生成し、新しいURLとして設定するには、どのようにしたら良いでしょうか?
また、"重複のないことが保証されている、他者から推測されにくい値"を生成するには、
Secure Randomモジュールの urlsafe_base64 メソッドというものを使用して良いでしょうか?

現状は、Create Question を行う度に、
http://localhost:3000/questions/1
http://localhost:3000/questions/2
http://localhost:3000/questions/3
.
.
.
と、アクセス可能なURLが作られていきます。

他者から推測されにくい値を生成することに urlsafe_base64 メソッドというものを使用して良ければ、
Create Question で新しい質問を作成する度に
http://localhost:3000/questions/urlsafe_base64で生成された値
http://localhost:3000/questions/urlsafe_base64で生成された値
http://localhost:3000/questions/urlsafe_base64で生成された値
.
.
.
とする、イメージをしています。

##参考画像
イメージ説明

##環境
Rails 5.0.0.1
Ruby 2.3.1p112 (2016-04-26 revision 54768) [x86_64-darwin15]

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Kuro-

2016/09/09 04:51

常にユニークなURLが作られるのが期待している仕様ではないのでしょうか?現状と仕様が合致していると思われるため、何をしたいのか詳しくお願いします。
hanzoo

2016/09/09 06:24

ありがとうございます。文章を修正しました!
guest

回答2

0

ベストアンサー

他者から推測されにくい値を生成し、新しいURLとして設定するには、どのようにしたら良いでしょうか?

新規作成のnewの時ではなく
既にあるものに対して参照や編集をする際に推測されにくい値でアクセスさせる場合
パラメータとして参照する為のキーが必要になります。

現状はおそらくidをキーとして渡していると思いますので
その部分をユニークになるような値に変更を行い
edit,showなどのアクションで解釈できる処理にするなどでは如何でしょうか?

↓参考になればと思います。

ruby

1def create 2 省略 3 questions.unique_key = SecureRandom.hex(10) 4 questions.save 5end 6 7def edit 8 unique_key = params[:id] 9 @questions = Question.find_by(unique_key: unique_key) 10end

また、"重複のないことが保証されている、他者から推測されにくい値"を生成するには、

Secure Randomモジュールの urlsafe_base64 メソッドというものを使用して良いでしょうか?

urlsafe_base64 メソッドを使用するのであれば
毎回ランダムに生成しますのでcreate時に値を生成してquestionsに覚えさる作りが良いかと思います。
そうでなければ、結局アクセスする為のキーがわからない状態になってしまいます。

urlsafe_base64モジュールの仕様

投稿2016/09/09 08:00

Kuro-

総合スコア29

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hanzoo

2016/09/15 01:03

参考にさせて頂き、思った設定ができようになりました。 回答頂き、ありがとうございました!
guest

0

問題の論点がよくわかりません。

現状は、Create Question を行う度に、

http://localhost:3000/questions/1
http://localhost:3000/questions/2
http://localhost:3000/questions/3

「重複しない値を生成し、新しいURLとして設定」できていませんか?

投稿2016/09/09 02:33

編集2016/09/09 02:34
shoota

総合スコア246

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hanzoo

2016/09/09 06:28

文章に矛盾があり、修正しました。回答ありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問