とにかく、sinatra のフレンドリーな URL を実現する方法はありますか?
ユーザーにhttp://xyz.io/username/posts/xdsfsdfsdfsd/titleではなく http://xyz.io/username/titleを表示させたい
それでも 2 番目の URL にルーティングします。
Sinatra/Rack を使用してこれを達成する方法はありますか、それとも仕事をするルビーの宝石はありますか?
とにかく、sinatra のフレンドリーな URL を実現する方法はありますか?
ユーザーにhttp://xyz.io/username/posts/xdsfsdfsdfsd/titleではなく http://xyz.io/username/titleを表示させたい
それでも 2 番目の URL にルーティングします。
Sinatra/Rack を使用してこれを達成する方法はありますか、それとも仕事をするルビーの宝石はありますか?
リクエストを処理するコードを通常のRubyメソッドに配置し、両方のルートにそのメソッドをアクションとして呼び出させるだけです。
def handle_request
#params hash is available here as in normal route block
end
get '/:username/posts/:id/:title' do
handle_request
end
get '/:username/:title' do
handle_request
end
get "/:user/:title" do
user, title = params.values_at('user','title')
id = find_id_from_title_and_user( user, title )
redirect url("/#{user}/posts/#{id}/#{title}")
end
ユーザーが醜いURLをロードしたら、ページをリロードせずにアドレスバーをよりきれいなURLに変更します。
<!-- on the 'ugly' page -->
<script type="text/javascript">
// Make the address bar lie about what our address is
// See: https://developer.mozilla.org/en/DOM/Manipulating_the_browser_history
history.pushState({}, window.title, calculateNiceURLString());
</script>
リロードとブックマークを機能させるには、オプション1(または「nice」URLの処理)も必要です。
FriendlyId は ActiveRecord で動作し、activerecord は Sinatra で使用できます。このブログ チュートリアルhttp://danneu.com/posts/15-a-simple-blog-with-sinatra-and-active-record-some-useful-tools/に従って、その方法を確認してください。その後私がしたことは、私のgemfileに Friendly_id を入れて実行しました
bundle
rake db:create_migration NAME=add_slug_to_posts
新しく作成された移行を次のように編集します
class AddSlugToPosts < ActiveRecord::Migration
def change
add_column :posts, :slug, :string
add_index :posts, :slug, unique: true
end
end
次に実行します
rake db:migrate
その後、app.rbファイルでそれを要求し(「friendly_id」が必要)、これらの2行をPostクラスの先頭に配置したことを確認しました
class Post < ActiveRecord::Base
extend FriendlyId
friendly_id :title, use: :slugged
...
end
URL、params ハッシュ、またはどこでも :id を参照しているところはどこでも、それが app.rb であろうとビュー内のリンクであろうと、私はそれを :slug に変更しました。スラッグは一意の識別子であるため、正常に機能します。データベースにはすでにいくつかの投稿があったので、tux を実行してスラッグを手動で入力し、
a = Post.find(1)
a.save
(および番号の変更) 各エントリに対して、 Friendly_id が自動的にスラッグを作成します。また、新しい投稿の作成時にすべてのスラッグを作成します。美しさ!ところで私のバージョンは
activerecord = 3.2.13
friendly_id = 4.0.9
ruby = 1.9.3