2

少し問題があります...ドイツのWebサイトにサービスを提供するRailsアプリケーションをセットアップしています。Rails の内部複数形機能を利用するために、すべてのモデルを英語のままにしました (例: モデル " JobDescription")。ここで、" " を呼び出すと、これまでのhttp://mysite.com/job_descriptions/すべての情報が得られます。job_descriptions私は URL に英語の用語 " " を入れたくなかったのでjob_descriptions、routes.rb に以下を入れました。

map.german_term '/german_term', :controller => 'job_descriptions', :action => 'index'
map.german_term '/german_term/:id', :controller => 'job_descriptions', :action => 'show'

http://mysite.com/german_term/" " または " "を呼び出すとhttp://mysite.com/german_term/283、すべての が取得job_descriptionsされます。これで問題ありません。

ただし、URL をより SEO フレンドリーにするために、ID を URL 内のよりユーザーフレンドリーなスラッグに交換したいと考えています。したがって、私は以下を my に入れましたjob_description.rb

def to_param
"#{id}-#{name.gsub(/[^a-z0-9]+/i, '-')}"
end

job_description_pathどのlink_toメソッドでも" " を使用すると、URL が " http://mysite/job_descriptions/13-my-job-description-title " のようにレンダリングされます。

しかし、これが私が立ち往生しているところです。「http://mysite/german_term/13-my-job-description-title」を取得したいと思います。job_description_pathlink_to コードで" " を " " に置き換えようとしましたgerman_term_pathが、" " しか生成されませんhttp://mysite/german_term/13。当然、to_param呼ばれません。私が見つけた 1 つの回避策は、次のリンクを作成することです。

<%= link_to job_description.name, german_term_path(job_description.to_param) %>

link_toしかし、コード内のすべての呼び出しを変更するのはかなり面倒です。私が望むのは、URL に出現するたびにjob_description" " を " "に置き換えることです。german_term

何かご意見は?!?

よろしく、

セバスチャン

4

2 に答える 2

7

必要なものを取得するには、RESTfulルートヘルパーを使用する必要があると思います。

その場合、リファクタリングはそれほど必要ありません(JobDescriptionsをリソースとしてマップしたと仮定します)。to_paramをそのままにして、JobDescriptionsルートを次のようなものに変更します。

map.resources :job_descriptions, :as => 'german_term'

お役に立てれば!

于 2009-01-29T15:54:44.180 に答える
0

Rails は

def to_params 
end

Restful ルート/リンク ヘルパーを使用している場合の URL ビルダー。私が知っている唯一の方法は、英語のリンクを破棄してすべてドイツ語で行う場合を除き、あなたが行ったのと同じようにすることです. その場合は、名前付きルート行を取り除き、データベースから正しい名前フィールドを使用するように to_params を変更してください。その時点で、REST ルートは正しく動作するはずです。

于 2009-01-29T15:46:12.077 に答える