[英]How to add a new action in Ruby on Rails?
我在routes.rb中有這個
map.namespace :admin do |admin|
admin.resources :projects, :has_many => :products
end
我想要的是能夠在route.rb文件中設置一些內容,以便在產品控制器中使用新操作。 腳手架后手動添加的動作。
我嘗試過這樣的事情
map.namespace :admin do |admin|
admin.resources :projects, :has_many => :products , :collection => {:plan => :get}
end
計划是我在產品控制器中的新動作
沒有用,我在任何地方都找不到任何好的解決方案。 請幫忙。
正如klew指出的那樣,您可能需要成員操作而不是集合操作。
但是在走這條路線之前,請先考慮一下是否確實需要。 不鼓勵添加自定義操作。 您最好保持在7個CRUD操作的約束之內。 做到這一點的方法是添加更多的控制器:)
例如,如果你有users
控制器和groups
控制器,然后加入人成團不join_group
在操作users
控制器,而不是add_user
在行動group
控制器,它定期create
在行動memberships
控制器:)。
並且請記住,控制器並不總是與模型相對應,並且模型不一定與數據庫表相對應,您可以更加靈活。
回到您的情況,我想您可能只想像這樣添加一個嵌套在項目資源內的單例資源
map.namespace :admin do |admin|
admin.resources :projects, :has_many_products, :has_one => :plan
end
並在plans_controller中實施:show操作,該操作應映射到/admin/projects/:project_id/plan
更改
map.namespace :admin do |admin|
admin.resources :projects, :has_many => :products
end
在
map.namespace :admin do |admin|
admin.resources :projects do |project|
project.resources :products, :member => { :new_action => :get }
end
end
這里有一些例子。
您的示例應生成如下網址: /admin/projects/plan
。 如果您想使用/admin/projects/2/plan
這樣的網址,請使用:
map.namespace :admin do |admin|
admin.resources :projects, :has_many => :products , :member => {:plan => :get}
end
並且不要忘記在您的admin/products_controller.rb
添加plan
方法:
def plan
...
end
我不確定,但是您可能需要在更改路由后重新啟動服務器才能使其正常工作。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.