2012-04-03 11 views
0

Bearbeiten // Eine Bearbeitung an der Unterseite hinzugefügt. Die Probleme scheinen mit dem Benutzerpostpfad verknüpft zu sein.Rails Route Fehler geschachtelte Routen (link_to user_post_path)

Ich habe versucht, die Eingabe:

<%= link_to 'show', user_post_path(post) %> 

aber der Fehler unten vor meinem bearbeiten aufgelistet bekommen.

was dazu führte:

No route matches {:action=>"show", :controller=>"posts", :user_id=>#<Post id: 1, topic: 
"1st Post", mood: "happy", post: "I don't know. Omg this works!", created_at: 
"2012-03-30 23:42:51", updated_at: "2012-04-01 06:01:48", user_id: 1>} 

Ideen?

Ich habe mir die anderen Beiträge zu diesem speziellen Thema angesehen, aber ich habe bisher keine Lösung für mein Problem gefunden.

Ziel ist es, eine Liste von Posts anzuzeigen, die einem Benutzer zugeordnet sind. Die Rake-Routen sagen, dass/users /: user_id/posts zur index-Datei führen sollte, aber seltsamerweise bezieht sich die Fehlermeldung auf die Aktion: show in den Post-Controllern. Warum? Warum ist der Hash für: user_id leer?

Alle Hilfe ist willkommen.

Hier mein Fehler im Browser ist:

No route matches {:action=>"show", :controller=>"posts", :user_id=>#<Post id: 1, topic: 
"1st Post", mood: "happy", post: "I don't know. Omg this works!", created_at: 
"2012-03-30 23:42:51", updated_at: "2012-04-01 06:01:48", user_id: 1>} 

W

1 Testapp::Application.routes.draw do 
2 resources :users do 
3  resources :posts 
4 end 
5 
6 root to: 'home#index' 

Hier ist meine Harke Routen:

user_posts GET /users/:user_id/posts(.:format)   posts#index 
      POST /users/:user_id/posts(.:format)   posts#create 
new_user_post GET /users/:user_id/posts/new(.:format)  posts#new 
edit_user_post GET /users/:user_id/posts/:id/edit(.:format) posts#edit 
user_post GET /users/:user_id/posts/:id(.:format)  posts#show 
      PUT /users/:user_id/posts/:id(.:format)  posts#update 
      DELETE /users/:user_id/posts/:id(.:format)  posts#destroy 
     users GET /users(.:format)       users#index 
      POST /users(.:format)       users#create 
    new_user GET /users/new(.:format)      users#new 
edit_user GET /users/:id/edit(.:format)    users#edit 
     user GET /users/:id(.:format)      users#show 
      PUT /users/:id(.:format)      users#update 
      DELETE /users/:id(.:format)      users#destroy 
     root  /          home#index 

Beiträge Controller:

class PostsController < ApplicationController 
    # GET /posts 
    # GET /posts.json 
    def index 
    @posts = Post.find_by_user_id(params[:user_id]) 

    respond_to do |format| 
     format.html # index.html.erb 
     format.json { render json: @posts } 
    end 
    end 

    # GET /posts/1 
    # GET /posts/1.json 
    def show 
    @post = Post.find(params[:id]) 

    respond_to do |format| 
     format.html # show.html.erb 
     format.json { render json: @post } 
    end 
    end 

    # GET /posts/new 
    # GET /posts/new.json 
    def new 
    @post = Post.new 

    respond_to do |format| 
     format.html # new.html.erb 
     format.json { render json: @post } 
    end 
    end 

    # GET /posts/1/edit 
    def edit 
    @post = Post.find(params[:id]) 
    end 

    # POST /posts 
    # POST /posts.json 
    def create 
    @post = Post.new(params[:post]) 

    respond_to do |format| 
     if @post.save 
     format.html { redirect_to @post, notice: 'Post was successfully created.' } 
     format.json { render json: @post, status: :created, location: @post } 
     else 
     format.html { render action: "new" } 
     format.json { render json: @post.errors, status: :unprocessable_entity } 
     end 
    end 
    end 

    # PUT /posts/1 
    # PUT /posts/1.json 
    def update 
    @post = Post.find(params[:id]) 

    respond_to do |format| 
     if @post.update_attributes(params[:post]) 
     format.html { redirect_to @post, notice: 'Post was successfully updated.' } 
     format.json { head :no_content } 
     else 
     format.html { render action: "edit" } 
     format.json { render json: @post.errors, status: :unprocessable_entity } 
     end 
    end 
    end 

    # DELETE /posts/1 
    # DELETE /posts/1.json 
    def destroy 
    @post = Post.find(params[:id]) 
    @post.destroy 

    respond_to do |format| 
     format.html { redirect_to posts_url } 
     format.json { head :no_content } 
    end 
    end 
end 

Bearbeiten //

Ich habe das Problem auf einen Link_to beschränkt.

14 <% @posts.each do |post| %> 
15 <tr> 
16  <td><%= post.topic %></td> 
17  <td><%= post.mood %></td> 
18  <td><%= post.post %></td> 
19  <td><%= post.user_id %></td> 
20  <td><%= link_to user_post_path(post) %> #this is giving me an error 
21 </tr> 
22 <% end %> 
23 </table> 

Antwort

3

Da diese verschachtelten Pfade sind, haben Sie daran gedacht, den Benutzer sowie die Post übergeben? Ihre endgültige URL erwartet ein user_id sowie eine post_id, so können Sie die folgenden aufrufen müssen:

<%= link_to user_post_path(post.user, post) %> 

Die Dokumentation ist hier: Rails Guide on Nested Resources

+0

ich nur wollte antworten, weil ich die Lösung Sekunden gefunden vor Du hast geantwortet! – cj3kim

+0

Das war meine Lösung und es hat funktioniert. <% = link_to 'show', user_post_path (post.user_id, post.id)%> – cj3kim

+0

Danke für die Antwort, btw. :] – cj3kim