0

Rails初心者からの別の質問。Rails 3.xのmysqlで Friendly_id gemを使用しています

これは設計上の問題です (レールでは簡単かもしれません)。Railsの専門家からのアドバイスを期待しています。私は図書館リストアプリを構築しています。ユーザーがライブラリを「大都市圏」または「都市」別に表示できる場所。例えば:

次のような URL が必要です。

www.list.com/library/san-francisco-bay-area

また

www.list.com/library/san-francisco-bay-area/palo-alto/

データベースにはテーブルがあります:

library
-------
id, name, city_id, slug

name はここにスラッグされ、city_id は FK です

city
----
city_id, name, metro_area_id, slug

名前はここにスラッグされ、metro_area_id は FK です

metro_area 
----------
metro_area_id, name, state, slug

名前はここにスラッグされます

したがって、ユーザーがブラウザで www.list.com/library/san-francisco-bay-area/palo-alto を参照すると、

san-francisco-bay-area/palo-alto にある図書館の一覧を取得したいと考えています。しかし、私のライブラリ テーブル モデルには、ライブラリの名前のみのスラッグが含まれています。この URL を解析して、ライブラリ モデルとコントローラで使用できる city_id を見つけ、リストを取得する方法を説明します。

覚えておいてください、私は都市の名前だけに頼ることはできません. メトロ「サンフランシスコベイエリア」にある「パロアルト」のcity_idを見つける必要があります。metro_area と city のスラッグは他のテーブルにあるため、モデルとコントローラーを設計する最良の方法は何ですか?

コントローラーの表示方法は次のとおりです。

def show
    @user = Library.find(params[:id])

    respond_to do |format|
       format.html # show.html.erb
       format.json { render json: @library }
    end
end

モデルは

class Library < ActiveRecord::Base
  attr_accessible :name, :city_id, :slug
  extend FriendlyId
  friendly_id :name, use: :slugged
end

これは、フレンドリ URL の要件では機能しません。ですから、専門家からのアドバイスをいただければ幸いです:)

4

1 に答える 1

0

解決策を見つけたかもしれません。私もレールは初めてなので、これでうまくいくと思います。

2 つの異なるモデルのスラッグを表示したいので。IDを表示する方法は次のようになると思います

www.list.com/libraries/:id/cities/:id/metro_areas/:id

これは、ネストされたリソースを追加してルート ファイルを編集することで実行できます。

のような2つのIDを表示するだけです

www.list.com/library/:city_id/:metro_area_id

Railsガイドはそれを動的セグメントと呼んでいます

その後は、ID をスラッグに変換するだけです。

これは、あなたのケースに対処している FriendlyId のドキュメントでも見つかりました。

それが役に立てば幸い

于 2013-01-01T04:26:58.467 に答える