1

Rails アプリで ID の代わりにスラッグを使用して、投稿を表示するときに URL をきれいにしています。

したがって、articles.rb ファイルでは、現在、すべてのリンクにこれを使用しています。

 def to_param
    slug
  end

これにより、次のような URL が生成されます: ...articles/this-is-a-test-article

投稿を編集するときだけ、通常の ID URL 形式を使用したいのですが、これを変更できるようにする方法はありますか?

つまり ...articles/7

参考までに、私の記事のコントローラーには次のものがあります。

def edit
@article = Article.find_by_slug(params[:id])
end

どんな助けでも大歓迎です、ありがとう。

4

3 に答える 3

0

そのため、常に取得している params では、params[:id]これが必要な記事のスラッグと等しい場合もあれば、id と等しい場合もあります。

前者の場合、あなたは言うべきです

@article = Article.find_by_slug(params[:id])

後者の場合、あなたは言うべきです

@article = Article.find_by_id(params[:id])

これは、編集アクションまたはそれらの行に沿ったものでは使用しない before_filter で管理できます。

編集:

params の代わりに id を使用するリンクを作成するには、ヘルパーで具体的に指定します。オブジェクトを通過する場合、Rails は to_param を呼び出して params[:id] の値を生成します。オブジェクトを通過する必要はありません。

edit_article_path(:id => @article.id)
于 2014-05-30T13:45:42.487 に答える
0

before_action必要なメソッドだけを追加し、からメソッドslugを除外することができますeditbefore_action

このようなもの

before_action :set_article, only: [:show,:update, :destroy]

def edit

@article = Article.find_by_id(params[:id])

end

private
def set_article
@article = Article.find_by_slug(params[:id])
end
于 2014-05-30T13:49:17.470 に答える