2
我想創建嵌套的資源,其中的子資源沒有自己的存在。例如鏈接到Person
的Address
資源。在Rails中限制路由到嵌套資源
我的路線聲明看起來像這樣:
map.resources :persons,
:has_many => :addresses
這使我有以下途徑:
person_addresses GET /persons/:person_id/addresses {:controller=>"addresses", :action=>"index"}
formatted_person_addresses GET /persons/:person_id/addresses.:format {:controller=>"addresses", :action=>"index"}
POST /persons/:person_id/addresses {:controller=>"addresses", :action=>"create"}
POST /persons/:person_id/addresses.:format {:controller=>"addresses", :action=>"create"}
new_person_address GET /persons/:person_id/addresses/new {:controller=>"addresses", :action=>"new"}
formatted_new_person_address GET /persons/:person_id/addresses/new.:format {:controller=>"addresses", :action=>"new"}
edit_person_address GET /persons/:person_id/addresses/:id/edit {:controller=>"addresses", :action=>"edit"}
formatted_edit_person_address GET /persons/:person_id/addresses/:id/edit.:format {:controller=>"addresses", :action=>"edit"}
person_address GET /persons/:person_id/addresses/:id {:controller=>"addresses", :action=>"show"}
formatted_person_address GET /persons/:person_id/addresses/:id.:format {:controller=>"addresses", :action=>"show"}
PUT /persons/:person_id/addresses/:id {:controller=>"addresses", :action=>"update"}
PUT /persons/:person_id/addresses/:id.:format {:controller=>"addresses", :action=>"update"}
DELETE /persons/:person_id/addresses/:id {:controller=>"addresses", :action=>"destroy"}
DELETE /persons/:person_id/addresses/:id.:format {:controller=>"addresses", :action=>"destroy"}
現在我要確保,一個人的地址是隻讀的,也就是說,我只需要對地址使用show
和index
操作。
我嘗試這樣做:
map.resources :persons,
:has_many => :addresses,
:collection => { :addresses => [ :show, :index ] }
,並得到這個錯誤:
(in /home/rmk/app)
rake aborted!
Invalid HTTP method specified in route conditions: {:method=>:show}
(See full trace by running task with --trace)
有沒有什麼辦法可以做到這一點?
編輯: 我的主要問題是,我沒有正確使用代碼塊(我想盡可能使用has_one等)。所以我persons
路線是這樣的(有點人爲的例子):
map.resources :persons, :has_one => :ssn, :except => [:new, :edit] do |person|
person.resources :addresses, :only => [:index, :show]
end
太棒了,卡爾,謝謝。正如我在上面的編輯中所解釋的那樣,我沒有正確使用代碼塊(我想指定其他約束條件:使用has_one的人:has_many等,只在需要時才使用代碼塊)。 – rmk 2010-07-14 21:16:03