簡體   English   中英

如何在Ruby on Rails中添加新動作?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM