0

現在3.0でRuby on Railsを学んでいます

フレンドリーという列を持つ投稿テーブルを作成しました

/post/:id を使用する代わりに、/post/:friendly を使用したい

つまり、URL は /post/1 ではなく /post/post-title のようになります

このコードでコントローラーを適切に組み立てました。

def show
  @post = Post.find(params[:friendly])

  respond_to do |format|
    format.html
    format.json { render :json => @post }
  end
end

しかし、routes.rb を変更してこの変更を実装する方法がわかりません。

今、それはちょうど言う

resources :post

よろしくお願いします。

4

2 に答える 2

3

モデルで to_param メソッドを使用できますhttp://apidock.com/rails/ActiveRecord/Base/to_param

1-some-name, 2-some-other-name などのフレンドリ内にオブジェクト ID を保持する場合、他に何もする必要はありません。Rails は文字列から id を取り除き、それを使用してオブジェクトを検索します。そうでない場合は、find(params[:id]) の代わりに find_by_friendly(params[:id]) を使用するようにコントローラーを変更する必要があります。

もう 1 つの方法は、https://github.com/norman/friendly_idのような gem を使用してこれを実現することです。

于 2012-09-18T00:03:51.773 に答える
0

検索時にid変数の形式を変更する場合は、次のようにルートを変更できます。

resources :post, :except => find do
  # Change the find to accept an id that's alphanumeric, but you can change 
  # this regex to whatever you need.
  get 'find', :on => :member, :constraints => { :id => /[a-zA-Z]*/ }
end

次に、posts#findで投稿を取得するには、次のことを行う必要があります

Post.find_by_friendly(Params[:id])

1つの問題は、これがヘルパーパスを壊すことです-たとえばpost_path(@post)post_path(:id => @post.friendly)

http://guides.rubyonrails.org/routing.html#http-verb-constraints

于 2012-09-18T00:40:09.780 に答える