librelist archives

« back to archive

NoMethodError al llamar _form

NoMethodError al llamar _form

From:
Ruben Achimon
Date:
2011-08-13 @ 14:08
buen dia a todos,
tengo un error de NoMethodError en el _form y no logro ver el problema, el
error es el siguiente:

NoMethodError in Verificaciones#new
Showing /app/views/verificaciones/_form.html.erb where line #3 raised:
undefined method `verificaciones_path' for #<#<Class:0xb6c708ec>:0xb6c6eeac>
Extracted source (around line #3):
1: <div id="granform">
2: <fieldset>
3: <%= form_for(@verificacion) do |f| %>

el routes.rb esta asi:
  resources :instrumentos do
    collection do
      get   :find
      get   :portada
      get   :instrumentos_por_razon_social
      post  :agregar_nuevo_instrumento
    end
    resources :verificaciones
  end

el controlador:
  # GET /verificaciones/new
  # GET /verificaciones/new.xml
  def new
    @verificacion = Verificacion.new

    respond_to do |format|
      format.html # new.html.erb
      format.xml  { render :xml => @verificacion }
    end
  end

sucede solamente cuando intento usar el _form
ha habido algun cambio en el form_for al usar rutas anidadas?
estoy trabajando con rails 3.0.7 y ruby 1.8.7-p334

salu2,

Re: [rubysur] NoMethodError al llamar _form

From:
Cristian Rasch
Date:
2011-08-13 @ 15:23
Hola Rubén,

El problema que tenés es que rails no se da cuenta que el plural de
verificacion es vericaciones (rails por defecto piensa que es
verificacions). Esto lo remediás agregando:

ActiveSupport::Inflector.inflections do |inflect|
  inflect.plural 'verificacion', 'verificaciones'
end

a tu archivo app/config/initializers/inflections.rb

Saludos!

On Sat, Aug 13, 2011 at 11:08 AM, Ruben Achimon <rachimon@gmail.com> wrote:
> buen dia a todos,
> tengo un error de NoMethodError en el _form y no logro ver el problema, el
> error es el siguiente:
>
> NoMethodError in Verificaciones#new
> Showing /app/views/verificaciones/_form.html.erb where line #3 raised:
> undefined method `verificaciones_path' for #<#<Class:0xb6c708ec>:0xb6c6eeac>
> Extracted source (around line #3):
> 1: <div id="granform">
> 2: <fieldset>
> 3: <%= form_for(@verificacion) do |f| %>
>
> el routes.rb esta asi:
>   resources :instrumentos do
>     collection do
>       get   :find
>       get   :portada
>       get   :instrumentos_por_razon_social
>       post  :agregar_nuevo_instrumento
>     end
>     resources :verificaciones
>   end
>
> el controlador:
>   # GET /verificaciones/new
>   # GET /verificaciones/new.xml
>   def new
>     @verificacion = Verificacion.new
>
>     respond_to do |format|
>       format.html # new.html.erb
>       format.xml  { render :xml => @verificacion }
>     end
>   end
>
> sucede solamente cuando intento usar el _form
> ha habido algun cambio en el form_for al usar rutas anidadas?
> estoy trabajando con rails 3.0.7 y ruby 1.8.7-p334
>
> salu2,
>



-- 
Ing. Cristian Rasch

Re: [rubysur] NoMethodError al llamar _form

From:
Ruben Achimon
Date:
2011-08-13 @ 15:34
hola cristian,
no parece ser ese el problema porque la pruralizacion la hace esta linea:
    inflect.plural /([rlnd])([A-Z]|_|$)/, '\1es\2'
igualmente lo agregue pero sigue dando el mismo error, incluso cuando hago
show funciona, ya que no utilizo el _form

Re: [rubysur] NoMethodError al llamar _form

From:
Cristian Rasch
Date:
2011-08-13 @ 15:42
ajap, entonces una consulta, tu objeto @verificacion extiende de AR::Base?
De no ser así tenés que incluir algunos módulos de ActiveModel para
que te funcione con el form, te paso un ejemplo si es el caso

2011/8/13 Ruben Achimon <rachimon@gmail.com>:
> hola cristian,
> no parece ser ese el problema porque la pruralizacion la hace esta linea:
>     inflect.plural /([rlnd])([A-Z]|_|$)/, '\1es\2'
> igualmente lo agregue pero sigue dando el mismo error, incluso cuando hago
> show funciona, ya que no utilizo el _form
>
>
>



-- 
Ing. Cristian Rasch

Re: [rubysur] NoMethodError al llamar _form

From:
Ruben Achimon
Date:
2011-08-13 @ 15:58
si de hecho los modelos estan asi:

class Instrumento < ActiveRecord::Base
  belongs_to  :establecimiento
*  has_many    :verificaciones, :dependent => :destroy*
  belongs_to  :tipo_instrumento
end

class Verificacion < ActiveRecord::Base
  belongs_to  :instrumento
end

ademas, en el index de verificaciones los link new, show, edit muestran buen
las rutas, el show no tiene problemas, eh estado buscando por el lado de las
rutas y paso de parametros pero ni siquiera funciona con el new, hay otros
_form en el sistema y funcionan bien, la unica diferencia es que este es el
unico con ruta anidada, pero al hacer un 'rake routes' las rutas se ven bien

$ rake routes | grep verifica
instrumento_verificaciones GET
/instrumentos/:instrumento_id/verificaciones(.:format) {:action=>"index",
:controller=>"verificaciones"}

                      POST
/instrumentos/:instrumento_id/verificaciones(.:format)
{:action=>"create", :controller=>"verificaciones"}

new_instrumento_verificacion GET
/instrumentos/:instrumento_id/verificaciones/new(.:format) {:action=>"new",
:controller=>"verificaciones"}

edit_instrumento_verificacion GET
/instrumentos/:instrumento_id/verificaciones/:id/edit(.:format)
{:action=>"edit", :controller=>"verificaciones"}

instrumento_verificacion GET
/instrumentos/:instrumento_id/verificaciones/:id(.:format) {:action=>"show",
:controller=>"verificaciones"}
                      PUT
/instrumentos/:instrumento_id/verificaciones/:id(.:format)
{:action=>"update", :controller=>"verificaciones"}
                      DELETE
/instrumentos/:instrumento_id/verificaciones/:id(.:format)
{:action=>"destroy", :controller=>"verificaciones"}

Re: [rubysur] NoMethodError al llamar _form

From:
Cristian Rasch
Date:
2011-08-13 @ 16:05
ah sisi, perdón x no haberlo visto antes, el problema está en que es
un recurso (verificación) nested dentro de otro (instrumento)

  resources :instrumentos do
    resources :verificaciones
  end

Necesitás pasarle un array de objetos a form_for, tipo:

form_for [@instrumento, @verificacion] do |f| ..

así  puede reconstruir la ruta lo más bien, por leer rápido no lo vi je.

En tu VerificacionesControllers#new deberías tener algo como:

def new
  @instrumento = Instrument.find(params[:instrumento_id])
  @verificacion = @instrumento.verificaciones.build
end

Cualquier problema escribí nuevamente :)

Saludos

2011/8/13 Ruben Achimon <rachimon@gmail.com>:
> si de hecho los modelos estan asi:
>
> class Instrumento < ActiveRecord::Base
>   belongs_to  :establecimiento
>   has_many    :verificaciones, :dependent => :destroy
>   belongs_to  :tipo_instrumento
> end
>
> class Verificacion < ActiveRecord::Base
>   belongs_to  :instrumento
> end
>
> ademas, en el index de verificaciones los link new, show, edit muestran buen
> las rutas, el show no tiene problemas, eh estado buscando por el lado de las
> rutas y paso de parametros pero ni siquiera funciona con el new, hay otros
> _form en el sistema y funcionan bien, la unica diferencia es que este es el
> unico con ruta anidada, pero al hacer un 'rake routes' las rutas se ven bien
>
> $ rake routes | grep verifica
> instrumento_verificaciones GET
> /instrumentos/:instrumento_id/verificaciones(.:format) {:action=>"index",
> :controller=>"verificaciones"}
>
>                       POST
> /instrumentos/:instrumento_id/verificaciones(.:format)
> {:action=>"create", :controller=>"verificaciones"}
>
> new_instrumento_verificacion GET
> /instrumentos/:instrumento_id/verificaciones/new(.:format) {:action=>"new",
> :controller=>"verificaciones"}
>
> edit_instrumento_verificacion GET
> /instrumentos/:instrumento_id/verificaciones/:id/edit(.:format)
> {:action=>"edit", :controller=>"verificaciones"}
>
> instrumento_verificacion GET
> /instrumentos/:instrumento_id/verificaciones/:id(.:format) {:action=>"show",
> :controller=>"verificaciones"}
>                       PUT
> /instrumentos/:instrumento_id/verificaciones/:id(.:format)
> {:action=>"update", :controller=>"verificaciones"}
>                       DELETE
> /instrumentos/:instrumento_id/verificaciones/:id(.:format)
> {:action=>"destroy", :controller=>"verificaciones"}
>
>



-- 
Ing. Cristian Rasch

Re: [rubysur] NoMethodError al llamar _form

From:
Ruben Achimon
Date:
2011-08-13 @ 17:39
gracias!
en algun momento probe pasandole los dos valores como decis pero me dio
error y ya no queria mas, por lo que no mire el error y volvi atras, ahora
me fije bien; si es verdad esa es la forma pero yo inicialmente lo pase asi:
<%= form_for[@instrumento, @verificacion] do |f| %>

y se me pasaron los parentesis! es asi:

<%= form_for([@instrumento, @verificacion]) do |f| %>

gracias cristian!
salu2,

Re: [rubysur] NoMethodError al llamar _form

From:
Cristian Rasch
Date:
2011-08-13 @ 19:11
De nada Rubén, saludos y buen finde!

2011/8/13 Ruben Achimon <rachimon@gmail.com>:
> gracias!
> en algun momento probe pasandole los dos valores como decis pero me dio
> error y ya no queria mas, por lo que no mire el error y volvi atras, ahora
> me fije bien; si es verdad esa es la forma pero yo inicialmente lo pase asi:
> <%= form_for[@instrumento, @verificacion] do |f| %>
>
> y se me pasaron los parentesis! es asi:
>
> <%= form_for([@instrumento, @verificacion]) do |f| %>
>
> gracias cristian!
> salu2,
>
>



-- 
Ing. Cristian Rasch