2011-08-21 18 views
5

¿Cómo especifico el controlador y la acción en un envío de formulario? Estoy tratando de usar un 'Controlador de clientes' para crear una Cuenta y una Persona asociada ('Cliente').Envío de formulario de enrutamiento a un controlador diferente

Aquí están los modelos pertinentes. Una Persona pertenece directamente a una Cuenta (que llamo 'Cliente') o a una Ubicación y Organización dentro de una Cuenta.

class Account < ActiveRecord::Base 
    has_many :organizations 
    has_many :persons, :as => :linkable 

    accepts_nested_attributes_for :organizations 
end 

class Person < ActiveRecord::Base 
    belongs_to :linkable, :polymorphic => true 
end 

Y aquí es la forma de crear un 'cliente' Estoy tratando de hacer junto con el resto del código:

<%= form_for @account, :url => { :controller => "clients_controller", 
           :action => "create" } do |f| %> 

<%= f.fields_for :persons do |builder| %> 
    <%= builder.label :first_name %><br /> 
    <%= builder.text_field :first_name %><br /> 
    <%= builder.label :last_name %><br /> 
    <%= builder.text_field :last_name %><br /> 
    <%= builder.label :email1 %><br /> 
    <%= builder.text_field :email1 %><br /> 
    <%= builder.label :home_phone %><br /> 
    <%= builder.text_field :home_phone %><br />   
    <% end %> 

    <%= f.submit "Add client" %> 
<% end %> 


class ClientsController < ApplicationController 

    def new 
     @account = Account.new 
     @person = @account.persons.build 
    end 

    def create 
     @account = Account.new(params[:account]) 
     if @account.save 
      flash[:success] = "Client added successfully" 
      render 'new' 
     else 
      render 'new' 
     end 
    end 

end 

Y aquí están mis rutas:

ShopManager::Application.routes.draw do 

resources :accounts 
resources :organizations 
resources :locations 
resources :people 
resources :addresses 

get 'clients/new' 
post 'clients' 

end 

Al intentar representar el formulario, aparece el siguiente error:

ActionController::RoutingError in Clients#new 

Showing C:/Documents and Settings/Corey Quillen/My 
Documents/rails_projects/shop_manager/app/views/clients/new.html.erb where line #1 
raised: 

No route matches {:controller=>"clients_controller", :action=>"create"} 
Extracted source (around line #1): 

1: <%= form_for @account, :url => { :controller => "clients_controller", :action =>  
    "create" } do |f| %> 
2: 
3: <%= f.fields_for :persons do |builder| %> 
4: <%= builder.label :first_name %><br /> 

Respuesta

12

Tienes que decir esto en routes.rb

resources :clients 

En el formulario, especifique la URL como clients_path con el método como post:

<%= form_for @account, :url => clients_path, :html => {:method => :post} do |f| %> 
--- 
<% end 

Para obtener más información de cómo rieles gestiona las direcciones URL REST: http://microformats.org/wiki/rest/urls

+0

¿Puede por favor publicar la línea número 9? –

+1

¡Esto funciona perfectamente! ¡Gracias por tu ayuda! Me faltaba accept_nested_attributes_for: personas en mi modelo de cuenta cuando publiqué mi último comentario. Lo siento por eso. –

+0

Usted es bienvenido :-) –

Cuestiones relacionadas