Re: [rubysur] Problema con namespace

9 views
Skip to first unread message
Message has been deleted

Jorge Vargas Silva

unread,
Aug 2, 2015, 10:36:18 PM8/2/15
to rub...@googlegroups.com
Creo que la ruta en el form en vez de ser esta:
 <%= simple_form_for(@faq, url: administrator_faqs_path) do |f| %>

Debe ser esta

<%= simple_form_for(@faq, url: administrator_faq_path) do |f| %>

En singular.

Ojalá te funcione!

Saludos

Jorge Vargas
Magnet.cl | Magickdevs.com

El 02-08-2015, a las 23:33, Jose De Sousa <jos...@gmail.com> escribió:

Ayuda por favor, cualquier que tenga unos minutos de ayudarme.

estoy usando este namespace en routes:

namespace :administrator do
  resources :faqs
  end

Cuando cargo el formulario para edit, lo carga bien, de echo muestra los datos que estoy escogiendo para modificar, pero cuando hago submit me dice:

No route matches [PATCH] "/administrator/faqs"

La acción de create funciona bien.

La salida de rake routes es:
 administrator_faqs        GET    /administrator/faqs(.:format)          administrator/faqs#index
                                      POST   /administrator/faqs(.:format)          administrator/faqs#create
 new_administrator_faq GET    /administrator/faqs/new(.:format)      administrator/faqs#new
 edit_administrator_faq GET    /administrator/faqs/:id/edit(.:format) administrator/faqs#edit
         administrator_faq GET    /administrator/faqs/:id(.:format)      administrator/faqs#show
                                      PATCH  /administrator/faqs/:id(.:format)      administrator/faqs#update
                                      PUT    /administrator/faqs/:id(.:format)      administrator/faqs#update
                                      DELETE /administrator/faqs/:id(.:format)      administrator/faqs#destroy


El controlador que está en controllers/administrator/faqs_controller.rb es el siguiente:



class Administrator::FaqsController < ApplicationController
layout "administrator"

  def index
       @faqs = Faq.all.order('pregunta asc')
  end

  def show
    @faq = Faq.find(params[:id])
  end

  def new
    @faq = Faq.new
  end

  def edit
    @faq = Faq.find( params[:id] )
  end

  def create
    @faq = Faq.new(faq_params)
    @faq.usuario_id = current_usuario.id
    respond_to do |format|
      if @faq.save
        format.html { redirect_to administrator_faq_path(@faq), notice: 'La pregunta fue creada exitosamente' }
        format.json { render :show, status: :created, location: @faq }
      else
        format.html { render :new }
        format.json { render json: @faq.errors, status: :unprocessable_entity }
      end
    end
  end

  def update
    respond_to do |format|
      if @faq.update(faq_params)
        format.html {redirect_to administrator_faq_path(@faq), notice: 'La pregunta fue modificada exitosamente' }
        format.json { render :show, status: :ok, location: @faq }
      else
        format.html { render :edit }
        format.json { render json: @faq.errors, status: :unprocessable_entity }
      end
    end
  end

  def destroy
    @faq.destroy
    respond_to do |format|
      format.html { redirect_to faq_url, notice: 'La pregunta fue exitosamente eliminada.' }
      format.json { head :no_content }
    end
  end

  private
    def set_faq
      @faq = Faq.find(params[:id])
    end

     def faq_params
      params.require(:faq).permit(:pregunta, :respuesta)
  end
end

Y mis vista que está en views/administrator/faqs/edit.html.erb
             <%= simple_form_for(@faq, url: administrator_faqs_path) do |f| %>
                       <%#= f.error_notification %>
                        <% if @faq.errors.any? %>
                        <div class="alert alert-danger">
                        <div class="error_explanation">
                          <ul>
                            <% @faq.errors.each do |attr,msg| %>
                            <li><%= "#{msg}" if @faq.errors[attr].first == msg %> </li>
                           <% end %>
                          </ul>                       
                        </div>
                      </div>
                      <% end %>
                       <%= f.input :pregunta, label: 'Pregunta', placeholder: "Coloque la pregunta", wrapper_html: { class: 'username' } %>   
                           <%= f.input :respuesta, as: :text, label: 'Respuesta', placeholder: "Coloque la respuesta", :input_html => {:rows => 10} %>   
                       <div class="form-actions" align="center">
                              <%= f.button :submit, "Modificar pregunta" , :class=> "btn btn-primary" %>
                        </div>
                    <% end %>

Agradezco muchisimo la ayuda.

José


--
Has recibido este mensaje porque estás suscrito al grupo "rubysur" de Grupos de Google.
Para anular la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a rubysur+u...@googlegroups.com.
Para acceder a más opciones, visita https://groups.google.com/d/optout.

josedes

unread,
Aug 2, 2015, 11:08:09 PM8/2/15
to rubysur
Gracias amigo Jorge por tu respuesta, pero si coloco la ruta administrator_faq_path entonces me muestra el error:

undefined method `update' for nil:NilClass #lo que no deberia pasar

Lo que menos entiendo es que debería funcionar tanto new como edit con: <%= simple_form_for(:administrartor, @faq) do |f| %>

Pero no es así, tuve que colocar <%= simple_form_for(@faq, url: administrator_faq_path) do |f| %> por que la acción new/create funciona bien y el edit/update debería funcionar pero no

José

Emanuel Friedrich

unread,
Aug 3, 2015, 5:37:37 AM8/3/15
to rub...@googlegroups.com
podrias probar dos cosas.

simple_form_for([:administrator, @faq]) do |f|

ó

simple_form_for(@faq, url: administrator_faq_path(@faq)) do |f|
--
Emanuel Friedrich - Casi licenciado en Sistemas... :)
Cel: 3754-495887

Haya paz

Jose De Sousa

unread,
Aug 3, 2015, 9:50:42 AM8/3/15
to rubysur
Hola Emanuel gracias por responder,

Probe las dos formas que me dices que debeberían funcionar, pero al hacer submit me muestra el siguiente error:


undefined method `update' for nil:NilClass

Lo cual no tiene sentido. No utilice scaffold.

El problema es simple pero no ecuentro el error

José



OtusNet ©
Soluciones inteligentes
@ sus necesidades en Internet
Joselito De Sousa
(058)-0412.222.98.25

Geronimo Diaz

unread,
Aug 3, 2015, 9:55:17 AM8/3/15
to rub...@googlegroups.com
Hola Jose,

el error `undefined method `update' for nil:NilClass` es pq en el controller en la action update no instanciaste @faq, tendrias que o bien agregar el filtro set_faq para el updade o bien hacer el find @faq = Faq.find params[:id]

Saludos.

Geronimo Diaz
Ruby/RoR Developer


Jose De Sousa

unread,
Aug 3, 2015, 10:10:48 AM8/3/15
to rubysur
Geronimo FULL GRACIAS, ese era el problema y realmente no se como no lo vi, coloque:


@faq = Faq.find params[:id]

Muy agradecido desde el extremo del sur

Saludos

José
Reply all
Reply to author
Forward
0 new messages