0

ここで説明するように、parameterizeを使用してURLを書き換えようとしています:タイトルに基づいてURLを書き換えるにはどうすればよいですか?

これが私のモデルです:

class Article < ActiveRecord::Base
  belongs_to :category

  self.per_page = 5

  def to_param
    "#{title.parameterize}"
  end
end

そして私のリンク:

<%= link_to(article.title, blog_article_path(article), {:class => "blog_title"}) %>

問題は、のようなリンクがないことですが、リンクはあり/blog/article/"my-article-title"ますが/blog/article."my-article-title"、これは間違っており、解釈されません。

理由を知っていますか?

私のroute.rb:

get "blog/index"
get "blog/category"
get "blog/article" (I don't use the show action of my article controller, is it the reason ?)

resources :categories

resources :articles

ありがとう

4

1 に答える 1

0

リソースを渡すことによる現在の方法の使用link_toは、ルートファイルで実際にリソースを使用する場合にのみ実際に機能します。

これは、リソースのないルートとリソースによって生成されたルートを使用する場合の違い(レーキルートの出力)です。

blog_article GET    /blog/article(.:format)

article GET    /articles/:id(.:format)

使用article_path(@article)すると:id、リソースのIDが入力されます。

本当にそのルーティングが必要な場合は、Articles Controllerのshowアクションを使用することをお勧めします。そうするか、/blog/articles/:id次のようなことを行うことができます。

get "blog/article/:id" => "articles#show", :as => 'blog_article'

これは次のようになります。

blog_article GET    /blog/article/:id(.:format)

公式ガイドはこれについていくつかの良い情報を持っています。

于 2013-03-25T14:27:06.703 に答える