Forum: Ruby on Rails Pobrem with REST routes

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
0fdce938a28a604fd5613a68b0d78fcb?d=identicon&s=25 Jose vicente Ribera pellicer (joripel)
on 2009-03-14 14:38
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) %></td>

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 :(

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:in `find_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?
410ff5abeb4b1c686fe49d70dbba1c8f?d=identicon&s=25 GS (Guest)
on 2009-03-15 17:31
(Received via mailing list)
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 :-) ).

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-...
http://rails.rubyonrails.org/classes/Inflector.html#M001627
http://softwareas.com/bitten-by-rails-pluralizatio...

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-
80e4cb97cae5c8d745f72337d93fd8f2?d=identicon&s=25 MaD (Guest)
on 2009-03-15 18:32
(Received via mailing list)
> 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.
This topic is locked and can not be replied to.