2009-09-02 5 views
1

J'ai un contrôleur "manage_links.rb" qui permet aux utilisateurs de gérer leurs liens, qui ont un modèle "lien" correspondant. Je reçois l'erreur suivante:L'erreur de routage Rails ne reconnaît pas l'ID

ActionController::RoutingError in Manage_links#index 

Showing app/views/manage_links/index.html.erb where line #16 raised: 

edit_manage_link_url failed to generate from {:controller=>"manage_links", :action=>"edit", :id=>nil}, expected: {:controller=>"manage_links", :action=>"edit"}, diff: {:id=>nil} 
Extracted source (around line #16): 

13:  <td><%=h link.text %></td> 
14:  <td><%=h link.url %></td> 
15:  <td><%= link_to 'Show', manage_link_path(link.id) %></td> 
16:  <td><%= link_to 'Edit', edit_manage_link_path(link.id) %></td> 
17:  <td><%= link_to 'Destroy', manage_link_path(link.id), :confirm => 'Are you sure?', :method => :delete %></td> 
18: </tr> 
19: <% end %> 

J'ai la ligne suivante dans ma config/routes.rb:

map.resources :manage_links

Voici un extrait de ce que je reçois quand je lance « routes râteau » :

  manage_links GET /manage_links(.:format) 
         POST /manage_links(.:format) 
     new_manage_link GET /manage_links/new(.:format) 
     edit_manage_link GET /manage_links/:id/edit(.:format) 
      manage_link GET /manage_links/:id(.:format) 
         PUT /manage_links/:id(.:format) 
         DELETE /manage_links/:id(.:format) 

et voici le bloc complet de code qui est à l'origine de l'erreur:

<% @links.each do |link| %> <tr> 
    <td><%=h link.text %></td> 
    <td><%=h link.url %></td> <td><%= link_to 'Show', manage_link_path(link.id) %></td> 
    <td><%= link_to 'Edit', edit_manage_link_path(link.id) %></td> <td><%= link_to 'Destroy', manage_link_path(link.id), :confirm => 'Are you sure?', :method => :delete %></td> </tr> 
<% end %> 

ici est le code du contrôleur:

class ManageLinksController < ApplicationController 
before_filter :login_required  before_filter :find_user 

    # GET /links 
    # GET /links.xml  def index 
    @links = @user.links 

    respond_to do |format| 
     format.html # index.html.erb 
     format.xml { render :xml => @links }  end 
    end 
    # GET /links/1  # GET /links/1.xml  def show 
    @link = @user.links.find(params[:id]) 
    respond_to do |format| 
     format.html # show.html.erb 
     format.xml { render :xml => @link } 
    end  end 

    # GET /links/new 
    # GET /links/new.xml  def new 
    @link = @user.links.build 

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

    # GET /links/1/edit 
    def edit 
    @link = @user.links.find(params[:id])  end 

    # POST /links 
    # POST /links.xml 
    def create 

    @link = @user.links.build(params[:id]) 

    respond_to do |format| 
     if @link.save 
     flash[:notice] = 'Link was successfully created.' 
     format.html { redirect_to manage_link_url(@link) } 
     format.xml { render :xml => @link, :status => :created, :location => @link } 
     else 
     format.html { render :action => "new" } 
     format.xml { render :xml => @link.errors, :status => :unprocessable_entity } 
     end 
    end 
    end 

    # PUT /links/1 
    # PUT /links/1.xml 
    def update 
    @link = Link.find(params[:id]) 

    respond_to do |format| 
     if @link.update_attributes(params[:link]) 
     flash[:notice] = 'Link was successfully updated.' 
     format.html { redirect_to manage_link_url(@link) } 
     format.xml { head :ok } 
     else 
     format.html { render :action => "edit" } 
     format.xml { render :xml => @link.errors, :status => :unprocessable_entity } 
     end 
    end 
    end 

    # DELETE /links/1 
    # DELETE /links/1.xml 
    def destroy 
    @link = Link.find(params[:id]) 
    @link.destroy 

    respond_to do |format| 
     format.html { redirect_to manage_link_path } 
     format.xml { head :ok } 
    end 
    end 

    def find_user 
    @user = session[:user] 
    end 
end 

pourquoi est l'appel à « edit_manage_link_path (link.id) me envoie une erreur? Je sais que link.id retourne en fait un certain nombre, et si je coder en dur une valeur pour le paramètre au lieu de link.id, la fonction semble fonctionner correctement

+0

Il serait utile si vous avez posté le code du contrôleur – ennuikiller

Répondre

1

Essayez de passer le lien objet directement à la place:

fe

edit_manage_link_path(link) 
Questions connexes