2

私はまだRORに慣れていないので、質問の単純さを許してください...

したがって、 http://www.example.com/controller/ :id はテーブルにレコードを表示します。:id は数字 (1、2、3 など) です。

URL の :id を表示されたレコードのフィールドの値にする方法はありますか? http://www.example.com/controller/record_fieldを持つことができるように?テーブル内の特定のレコードへのわかりやすい参照が必要です。私はこれが可能でなければならないと確信しています。routes.rb で何かを変更する必要がありますか?

助けてくれてありがとう!

4

3 に答える 3

4

最もクリーンな方法は、モデルに新しい find メソッドを追加することです (または、単純に、Rails がコントロールに提供する find_by_fieldname を使用します)。次に、コントローラーで通常の find(params[:id]) の代わりにそのメソッドを使用して、モデル レコードを取得します。

ここで、これに関する Ryan B のスクリーンキャストをチェックしてください。とても簡単で、良い先生なので問題はないはずです。

于 2008-11-16T03:19:06.613 に答える
0

私はfriendly_idという名前の優れたRailsプラグインを使用しています。

http://github.com/norman/friendly_id/tree/master

それはあなたをうまく整理するはずです。それも十分に文書化されています。

現代ギリシャ文字が含まれている可能性のあるフィールドに注意してください。それらの回避策を考え出す必要があるかもしれません。

于 2008-11-16T08:54:49.493 に答える
0

JonSmockのソリューションも機能します。私は次のことを好む傾向があります。

class Hamburger << ActiveRecord::Base

  #this normally defaults to id
  def to_param 
     name
  end

end

class SomeModelController << ApplicationController

  def show 
    @hamburger = Hamburger.find(params[:id])  #still default code
  end
end

#goes in some view
This is the <%= link_to "tastiest hamburger ever", url_for(@hamburger) %>.

これは大まかに言えば、SEOの手法です(美しいURLもユーザーフレンドリーであり、ログインの背後にあるページなど、SEOを気にしない場合でも、絶対にすべての人に推奨します)。Rails SEOについてさらに詳しく説明します。これには、このような他のヒントも含まれています

重要なヒント:設計時に、変更する必要がある場合に何をするかを検討する必要がparamあります。たとえば、私のハンバーガーシナリオでは、「SinfullyDeliciousCheeseburger」の名前を「TripleBypass」に変更する可能性があります。それがURLを変更する場合、私のWebサイトへの顧客リンクの破損など、いくつかの考えられる影響があります。したがって、本番環境で使用する場合、通常、これらのモデルに不変のpermalink属性を指定します。この属性は、人間が意味するように初期化して1回だけ実行します。オブジェクトが後で変更された場合でも、URLは同じままです。(他にも解決策があります-それが最も簡単な解決策です。)

于 2008-11-19T06:46:32.980 に答える