2012-07-10 2 views
0

Je crée une application rails très basique pour la première fois avec 2 ressources, départements (départements) et membres. Je crois que j'ai utilisé correctement les ressources imbriquées, mais pour une raison quelconque, après l'exécution du serveur rails, l'identifiant de la ressource parent n'est pas généré/transmis correctement. Root est l'index depts # et à partir de là, je peux faire de nouveau et modifier en utilisant _form.haml rendu dans les nouvelles vues et éditer. Cependant, quand je fais/depts/3 je reçois une erreur avec "ne peut pas trouver dept avec id = 3". Cliquer sur pour éditer à partir de l'index me donne/depts/63/edit dans l'URL - je ne suis pas sûr d'où cet id = 63 vient. Essayer d'obtenir l'action 'show' en tapant/dept/63 dans l'URL ne fonctionne pas. J'ai d'abord créé Depts en propre, je l'ai fait fonctionner avec toutes les actions et vues, quelque chose s'est mal passé depuis que j'ai ajouté la ressource Membres.L'application Rails génère une erreur: id dans le contrôleur parent

routes.rb

 resources :depts do 
    resources :members 
end 

depts_controller.rb

def index 
     @depts = Dept.all 

     respond_to do |format| 
      format.html 
      format.json { render :json => @depts } 
     end 
     end 

     def show 
     @dept = Dept.find(params[:dept_id]) 

     respond_to do |format| 
      format.html 
      format.json { render :json => @dept } 
     end 
     end 

     def new 
     @dept = Dept.new(params[:dept]) 

     respond_to do |format| 
      format.html 
      format.json { render :json => @dept } 
     end 
     end 

     def create 
     @dept = Dept.new(params[:dept]) 

     respond_to do |format| 
      if @dept.save 
      format.html { redirect_to :action => 'index' } 
      format.json { render :json => @dept } 
      else 
      format.html { render :action => 'new' } 
      format.json { render :json => @dept } 
      end 
     end 
     end 

     def edit 
     @dept = Dept.find(params[:id]) 
     end 

     def update 
     @dept = Dept.find(params[:id]) 

     respond_to do |format| 
      if @dept.update_attributes(params[:dept]) 
      format.html { redirect_to :action => 'index'}#, :id => @dept } 
      format.json { render :json => @dept } 

      else 
      format.html { redirect_to :action => 'edit' } 
      format.json { render :json => @dept } 
      end 
     end 
     end 

    def destroy 
     @dept = Dept.find(params[:id]) 
     @dept.destroy 

     respond_to do |format| 
      format.html { redirect_to :action => 'index' } 
      format.json { render :json => @dept } 
     end 
     end 
    end 

show.haml

%p= @dept.name 

    %p= link_to "back", {:action => 'index'} 

index.haml

%h1 DEPARTMENTS 

    %ol 
     - @depts.each do |d| 
     %li= link_to d.name 
     %p= link_to 'edit department', edit_dept_path(d) 
     %p= link_to 'get rid of department!', d, :method => :delete, :id => d.id 

     %br 
    %p= link_to "ADD A NEW DEPARTMENT", new_dept_path 

Répondre

0

dans le show changement de méthode:

@dept = Dept.find(params[:dept_id]) 

à:

@dept = Dept.find(params[:id]) 

et nouveau changement de méthode:

@dept = Dept.new(params[:dept]) 

juste:

@dept = Dept.new 
Questions connexes