Pobrem with REST routes


#1

Hi first at all sorry if mu english is not the best.

I have this models:

Encuesta->titulo and description are string. Encuesta has_many
:preguntas
Preguntas-> texto is string, encuesta_id and orden are integer. Pregunta
belongs_to :encuesta and has_many :soluciones
Soluciones-> texto is string, pregunta_id and orden are integer.
Soluciones belongs_to :pregunta

Routes:
map.resources :encuestas do |encuesta|
map.resources :preguntas do |pregunta|
pregunta.resources :solucions
end
end

I can create preguntas for encuestas. But in the index view of preguntas
I have this code:

<%= link_to pregunta.texto,
encuesta_pregunta_solucions_path(@encuesta, @pregunta) %>

If I choose one pregunta the url that shows firefox is like that:

http://localhost:3000/encuestas/1/preguntas//solucions

It doesn’t show preguntas_id in the url :frowning:

In another way if i write for example this url in firefox:

http://localhost:3000/encuestas/1/preguntas/1/solucions

It shows me this error:
NoMethodError in SolucionsController#index

undefined method `find’ for #Encuesta:0x7f790aa4fdc8

RAILS_ROOT: /home/jose/marzo
Application Trace | Framework Trace | Full Trace

/usr/lib/ruby/gems/1.8/gems/activerecord-2.2.2/lib/active_record/attribute_methods.rb:260:in
method_missing' app/controllers/solucions_controller.rb:94:infind_encuesta_pregunta’

Parameters:

{“encuesta_id”=>“1”,
“pregunta_id”=>“1”}

My code-> Solucion controller

before_filter :find_encuesta_pregunta

def index

@solucions = @pregunta.solucions.find(:all)
respond_to do |format|
  format.html # index.html.erb
  format.xml  { render :xml => @solucions }
end

end

def find_encuesta_pregunta
@encuesta=Encuesta.find(params[:encuesta_id])
@pregunta=@encuesta.find(params[:pregunta_id])
end

Anybody can help me?


#2

Ok, first, i can speak spanish, so i’ll write back in spanish, if that
makes it any easier for you. unfortunately i’m not sure how to add an
accent on my keyboard, so hopefully readability will still be good,
but if you write me back, please write me back in english (and you’re
english is good enough :slight_smile: ).

Espero que mi espanol sea suficiente tambien. te digo ahora que voy a
usar ‘tu’ in no ‘ud.’ simplemente porque es lo que a estoy
acostumbrado y por lo demas, no se que seria apropriado.

No se si esto es como lo escribiste en tu progama, pero vi que
escribiste esta lina:
belongs_to :encuesta and has_many :soluciones

y despues vi que siempre llamas el controller de soluciones
‘solucions’.
Me parece que podria ser esto.
que en la lina
has_many :soluciones
usaste espanol correcto, y en lo demas tenias que usar la
pluralizacion que hace Rails y que esto es el problema?

No se si te importa, pero Rails tiene las funciones de pluralizacion
para que cosas sean mas convenientes en ingles. Si es dificil siempre
pensar que tienes que pluralizar como se aria en ingles para palabras
que de verdad son espanoles (que, me imagino me
causaria…annoyance?), esto me parace que derepente seria mejor
encontrar una manera de cambiar la pluralizacion. leyendo estos
articulos:

http://slash7.com/articles/2005/11/17/rails-howto-pluralizing
http://rails.rubyonrails.org/classes/Inflector.html#M001627
http://softwareas.com/bitten-by-rails-pluralizationinflection

me parece que lo podrias lograr haciendo algunas addiciones o cambios
a la funcion ‘pluralize’ oh mirando a las reglas (‘rules’) que usa
rails.

si no es este problem de pluralizacion, no se que seria.

let me know if that works,
-Gabe

On Mar 14, 8:38 am, Jose vicente Ribera pellicer <rails-mailing-


#3

Ok, first, i can speak spanish, so i’ll write back in spanish, if that
makes it any easier for you.

ok, now I DON’T, so if i post anything you already said: i’m sorry.

your method missing comes from this line:
@pregunta=@encuesta.find(params[:pregunta_id])

find is not defined on instances.
try something like:
@pregunta=Pregunta.find(params[:pregunta_id])

or if there is a relation between those models maybe
@pregunta=@encuesta.preguntas.find(params[:pregunta_id])
or just
@pregunta=@encuesta.pregunta
that depends on the type of their relationship.