2011-09-29 45 views
2

我正在Heroku上開發Rails 3應用程序,這裏是這種情況:如何使一個Rails 3路由與2個控制器一起工作取決於數據庫數據?

有兩種模式:用戶和應用程序。兩者都具有 「蛞蝓」,並且可以通過相同的URL來訪問:

/蛞蝓

實施例:

/爲myuser> '用戶#節目' /MYAPP => '應用#節目'

處理此問題的最佳做法是什麼?我應該實施什麼清潔解決方案?

您可以在AngelList上看到相同的邏輯。例如,我的個人資料是http://angel.co/martynasjocius,我的應用程序可以在http://angel.co/metricious找到。

謝謝!

回答

2

我會考慮引入第三個模型,我把它叫做Lookup作爲例子,但是你可能想要找一個更好的名字。我還會假設你的用戶和應用程序模型也定義了一個名稱字段。

class Lookup < ActiveRecord::Base 
    belongs_to :owner, :polymorphic => true 
    validates_uniqueness_of :name 
end 

class User < Active::Record::Base 
    has_a :lookup, :as => :owner, :validate => true 
    before_create :create_lookup_record 

    def create_lookup_record 
    build_lookup(:name => name) 
    end 
end 

class App < Active::Record::Base 
    has_a :lookup, :as => :owner, :validate => true 
    before_create :create_lookup_record 

    def create_lookup_record 
    build_lookup(:name => name) 
    end 
end 

LookupsController < ApplicationController 

    def show 
    @lookup = Lookup.find_by_name(params[:id]) 
    render :action => "#{@lookup.owner.class.name.pluralize}/show" 
    end 

end 

# routes.rb 
resources :lookups 

我希望這個理念幫助,對不起,如果它沒有用:)

0

試試這個(代action爲自己的行爲,像showedit等):

class SlugsController < ApplicationController 
    def action 
    @object = Slug.find_by_name(params[:slug]).object # or something 
    self.send :"#{@object.class.to_s.downcase}_action" 
    end 

    protected 
    def app_action 
    # whatever 
    end 

    def user_action 
    # something 
    end 
end 

獨立的東西按照您認爲合適的方式放入模塊中。你可以讓每個類的對象都有自己的操作。

相關問題