2014-01-13 41 views
0

Rails初學者,請不要咬。我已經採取了維護/發展軌道的應用程序,但仍然在學習的繩索如何創建以下路線

我想生成以下路線:

/事件/ 1 /項目/ 2 /質押

其中1是eventId而2是Project Id

我有一個項目控制器和事件控制器。質押行動在項目控制器上

編輯:回答@ wacko的評論如下。

一)忽略外殼和URL我問的多元化(我知道有些原來的問題...無效)

事件已經多個項目,質押動作將用戶帶到一個頁面在那裏他們可以爲特定項目輸入多個承諾。

也許相反祈願行動應該在事件控制器上?

和URL類似「事件/ 1 /保證/ 2」(其中2爲專案編號)

+0

你能描述之間的關係模型?只是爲了確認...「事件」是以單數形式並用大寫字母寫成複數形式,「項目」和「祈願」形式?我希望像'/ events/1/projects/2/pledge'這樣的URL(或.../pledge) – wacko

回答

2

您正在查找的內容稱爲嵌套資源,也就是說兩個資源之間存在父級子關係。

resource :events do 
    resource :projects do 
    get :pledge, :on => :member 
    end 
end 

對於這個工作,你的模型將是這個樣子

class Event < ActiveRecord::Base 
    has_many :projects 
end 

而且

class Project < ActiveRecord::Base 
    belongs_to :event 
end 
+0

事件關係是否是has_and_belongs_to_many:項目和項目關係是has_and_belongs_to_many:事件是否會更改您的任何建議? – MrBliz

+1

多對多的關係應該與這個路由邏輯一起工作 – Achrome

1

下面應該工作

get '/events/:event_id/projects/:id/pledge' => 'projects#pledge' 

在你的控制器動作,你可以得到的事項標識和從params哈希表PROJECT_ID爲params[:event_id]params[:id]分別

1
resources :events do 
    resources :projects do 
    member do 
     get :pledge 
    end 
    end 
end 

您可以更改gethttp你想要的方法。 您可以使用collections,如果你需要一個像/events/1/projects/pledge

collection do 
    get :pledge 
end 

從項目的根文件夾運行rake routes的路線,看看生成的路由列表

+0

你也可以使用':on'來消除最後一個塊:'get:pledge,on :: member ' – siekfried

+0

@siekfried是的! :) – Santhosh

1
resources :events do 
    resource :projects do 
    resources :pledge 
    end 
end 

這會給你設置範圍的能力在您的控制器中,並有權訪問所有7個REST動詞

1

僅僅指剛用這種方式

resources :events do 
resource :projects do 
    get '/pledge' 
end 
end