0

とにかく、sinatra のフレンドリーな URL を実現する方法はありますか?

ユーザーにhttp://xyz.io/username/posts/xdsfsdfsdfsd/titleではなく http://xyz.io/username/titleを表示させたい

それでも 2 番目の URL にルーティングします。

Sinatra/Rack を使用してこれを達成する方法はありますか、それとも仕事をするルビーの宝石はありますか?

4

3 に答える 3

2

リクエストを処理するコードを通常の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
于 2012-05-20T19:56:42.713 に答える
0

オプション1:「nice」URLから「real」URLにリダイレクトする

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

オプション2:「醜い」URLを常に「素敵」に見えるようにする

ユーザーが醜い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の処理)も必要です。

于 2012-05-21T19:17:49.777 に答える
0

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
于 2013-04-10T00:59:31.590 に答える