2011-11-11 20 views
1

私のウェブサイトの一部に英語 - フランス語の辞書があります。私はurlをsite.com/dictionary/:wordにしたい。しかし、英語の単語、フランス語の単語、および単語の男性/女性のバージョンがあるため、複数の単語を使用して1つのエントリを参照することができます。Rails 3:英語 - フランス語辞書の安らかなルート

次のコードを使用して、Rails 3で動作させることができました。

# routes.rb 
match 'dictionary/:word' => 'dictionary#show' 
match 'dictionary' => 'dictionary#index', :as => :dictionary 

# dictionary_controller.rb 
def show 
    @word = Dictionary.find(:first, 
    :conditions => [' 
     en_word_m = (?) or 
     en_word_f = (?) or 
     fr_word_m = (?) or 
     fr_word_f = (?) 
    ', 
    params[:word], params[:word], params[:word], params[:word] 
    ] 
) 
end 

あなたが見ることができるように、コードは非常に安らか少し厄介で、そしてません。それはまた、リンクのヘルパーにお尻の痛みを与え、代わりにハッシュを使うほうが良い。私はこれを行うより良い方法があるのだろうかと思っています。

答えて

1

休憩は、リソースとやりとりすることです。

dictionary/en-f/:word, :as => en_f_word 
dictionary/en-m/:word, :as => en_m_word 
dictionary/fr-f/:word, :as => fr_f_word 
dictionary/fr-m/:word, :as => fr_m_word 

これはURLで事の本質を反映し、より多くの記述ヘルパーを可能にするという利点を有する:リソースは、多くの層または側面を持っている場合、私はあなたのルートでいることを反映するに何かを言うことはありません

en_f__word_path(the_word) 

あなたは、あなたを与えるためにヘルパーに上記のラップは本当にわかりやすいヘルパーを望んでいた場合:

path_to_french_feminine_word(word) 

また、:最初の賛成で廃止されました:

Thing.first(:conditions => {:column => 'value'}) 
1

これはリチャードの答えに多少なりとも入ります。あなたはただ、フランス語と英語以上に展開すると

、あなたはこのようなあなたのルートを定義することができます:あなたがのparamsから発見しようとしている言語とセックスをやってのけることができます

match "dictionary/:language-:sex/:word" => "dictionary#show", :as => "word" 

ハッシュが入ってきます

あなたは、サポートしているすべての言語と性別のメソッドを定義するためにヘルパーでメタプログラミングを行うことができます。

関連する問題