2012-01-17 10 views
1

私は、新しいレールプロジェクトに取り組んでいます。これは、1つのレール設置から複数のウェブサイトを走らせることです。私はリソースを入れ子にすることなく関連付けを行う方法を混乱させる。Rails 3 multisite(ID付きアサーション)?

注:私はサブドメインを使用していますsite1.ex.com/photosだろうURLので、例えば site2.ex.com/ramps

は今、私はサイト1という名前のサイトを持っていますサイト1には、写真、ビデオ、およびランプがあります。 rails site has_many:photos、:videos、:ramps(あなたにアイデアを与えるだけで、コードは適切に書式化されていません)を伝えることによって、関連付けを行うことができます。 URLを含めてすべてうまく動作しますが、ここに私の問題があります。

  1. サイトは、私が望まないもの(例:example.com/sites/1/photos)であるURLに含まれています。
  2. 協会はうまくいきますが、私は3つの項目のために両親を持っていたいですか? Railsは、1レベル以上のルートをネストしないことを示唆しています。ここで enter image description here

は私がネストされたリソースを使用せずに、サイト間の関連付けを呼ばれることができます(写真用album_idとのSITE_IDをキャプチャすることはできません)どのよう enter image description here

  1. をやりたい何ですか?
  2. アルバムの場合has_many:写真belongs_to:siteどうすれば私のコントローラで呼び出すことができますか(例)?

私は写真を追加しましたので、誰かが私が達成しようとしていることを理解できるようにしました。

答えて

1

サブドメインを使用する場合は、ネストされたリソースをsitesに使用する必要はありません。ないSiteの下で他のすべてのリソースについて

class ApplicationController < ActionController::Base 

    before_filter :find_site_by_subdomain 

    def find_site_by_subdomain 
    @site = Site.find_by_subdomain!(request.subdomain) 
    end 

end 

、ネストそれらが、親(アルバム/写真、ビデオ、スロープ)として自分自身を使用する:サイトを見つけるために。

class AlbumsController < ApplicationController 

    … 

    def show 
    @album = @site.albums.find(params[:id]) 
    end 

    … 
end 
+0

何アルバム 'has_manyの場合:どのようにphotos'そして、あなたのAlbumsControllerにあなただけがApplicationControllerからあなたbefore_filterを利用すると@siteオブジェクトを使用して、現在のサブドメインでサイトに属しているものが必要になりますアルバム、サイト、写真を1つの通話またはコントローラに統合できますか? – coletrain

+1

PhotosControllerを作成し、 'before_filter:find_album'を追加し、' @album = @ site.albums.find(params [:album_id]) 'を呼び出す' find_album'というメソッドを作ります。次に、あなたのshowメソッドで、 '@photo = @ album.photos.find(params [:id])' –

関連する問題