2011-07-27 48 views
5

Mi aplicación tiene ofertas que tienen pedidos. En mi área de administración, quiero poder procesar los pedidos de forma manual.Método del controlador de llamadas en link_to desde la vista

En mis acceso/ofertas ver

<%= link_to "Process Orders", "Not sure what I put here?" %> 

en mi Acceso/deals_controller

def process_orders 
    @deals = Deal.find(params[:id] 
    @orders = @deals.orders.where("state" == ?, "pending") 

    @orders.each do |order| 
    #order processing code here 
    end 
end 

¿Cómo debo estructurar mi método link_to para llamar al método process_orders en mi controlador de admin/ofertas?

pensé algo así como

<%= link_to "Process Orders", access_deal_path(deal) %> 

que me dan la siguiente url

localhost:3000/access/deals/9 

¿Cómo consigo algo así como

localhost:3000/access/deals/9/process_orders 

también estoy abierto a sugerencias en la mudanza el método processing_orders para modelar o ayudar si esa es una mejor manera de hacerlo.

Mi extracto de mi archivo de rutas.

resources :deals do 
    resources :orders 
    end 

    namespace "access" do 
    resources :deals, :podcasts, :pages, :messages 
    end 
+0

¿sería access_deals_process_orders_path? – jaydel

+0

terminó siendo process_orders_access_deal_path (deal) pero tuve que agregar una nueva ruta gracias a @ Kevin-Tsoi –

+0

¡Estaba en el camino correcto! Simplemente completamente al revés y mal: P – jaydel

Respuesta

4

Usted puede hacer 1 de los siguientes:

Crear una ruta personalizada:

match 'access/deals/:id/process_orders' => 'access/deals#process_orders', :as => 'access_deal' 

entonces puede usar este enlace a:

<%= link_to "Process Orders", access_deal_path(deal) %> 

O

añadir una ruta miembro de:

namespace "access" do 
    resources :deals do 
     member do 
      get :process_orders 
     end 
    end 
end 

Su link_to se verá algo como esto:

<%= link_to "Process Orders", process_orders_access_deal_path(deal) %> 
1

que sería mejor si se mueve el método process_orders a su OrdersController pero esta es su decisión.

para obtener su código de trabajo sólo tiene que añadir esta ruta a su routes.rb:

resources :deals do 
    get :process_orders 
    resources :orders 
end 

y lo llaman con <%= link_to("Process Orders", deal_process_orders(deal)) %>.

Cuestiones relacionadas