2016-11-03 13 views
1

投稿を削除すると、「ID '= testuser」の投稿を見つけることができませんでした。私はこれがルーティングエラーだと思うので、実行されているIDはPostであり、Userではないはずです。私はそれを解決することはできません。投稿を作成することはできますが、同じ理由で削除や編集はできません。'id' = testuserで投稿を見つけることができません

必要に応じてさらに詳しい情報を提供できます。

のPostController位で抽出されたソースが破壊される場合:

def set_post 
@work = Work.find(params[:id]) 

routes.rbを

Rails.application.routes.draw do 

devise_for :users, :controllers => { :registrations => "registrations" } 
resources :posts do 
end 

# Define route URL 
root 'pages#index' 

# Define routes for Pages 
get '/home' => 'pages#home' 

get '/user/:id' => 'pages#profile' 

get '/new' => 'posts#new' 

Pages_controller.rb

class PagesController < ApplicationController 

def index 
end 

def home 
end 

def profile 
if (User.find_by_username(params[:id])) 
    @username = params[:id] 
else 
    redirect_to root_path, :notice=> "User not found!" 
end 

@posts = Post.all.where("user_id = ?", User.find_by_username(params[:id]).id) 
@newPost = Post.new 

end 

end 

Posts_controller.rb

class PostsController < ApplicationController 
before_action :set_post, only: [:show, :edit, :update, :destroy] 


def create 
    @post = Post.new(post_params) 
    @post.user_id = current_user.id #assign post to the user who created it 
    respond_to do |f| 
     if (@post.save) 
      f.html { redirect_to "", notice: "Post created!" } 
     else 
      f.html { redirect_to "", notice: "Error: Post Not Saved" } 
     end 
    end 
end 

def show 

end 

def edit 
respond_to do |format| 
    if @post.update(post_params) 
    format.html { redirect_to @post, notice: 'Your post was successfully updated.' } 
    format.json { render :show, status: :ok, location: @post } 
    else 
    format.html { render :edit } 
    format.json { render json: @post.errors, status: :unprocessable_entity } 
    end 
end 
end 

def destroy 
    @post.destroy 
    respond_to do |format| 
    format.html { redirect_to root_path, notice: 'Post was successfully deleted.' } 
    format.json { head :no_content } 
end 
end 

private 

def set_post 
    @post = Post.find(params[:id]) 
end 

def post_params #allows certain data to be passed via form 
    params.require(:post).permit(:user_id, :title, :description, :image) 
end 

end 

Profile.html.erb

... 
<%= link_to('Delete', post_path, :method => :delete) %> 
... 

ターミナル

    Prefix Verb URI Pattern     Controller#Action 
    new_user_session GET /users/sign_in(.:format)  devise/sessions#new 
     user_session POST /users/sign_in(.:format)  devise/sessions#create 
destroy_user_session DELETE /users/sign_out(.:format)  devise/sessions#destroy 
     user_password POST /users/password(.:format)  devise/passwords#create 
    new_user_password GET /users/password/new(.:format) devise/passwords#new 
    edit_user_password GET /users/password/edit(.:format) devise/passwords#edit 
        PATCH /users/password(.:format)  devise/passwords#update 
        PUT /users/password(.:format)  devise/passwords#update 
cancel_user_registration GET /users/cancel(.:format)  registrations#cancel 
    user_registration POST /users(.:format)    registrations#create 
new_user_registration GET /users/sign_up(.:format)  registrations#new 
edit_user_registration GET /users/edit(.:format)   registrations#edit 
        PATCH /users(.:format)    registrations#update 
        PUT /users(.:format)    registrations#update 
        DELETE /users(.:format)    registrations#destroy 
       posts GET /posts(.:format)    posts#index 
        POST /posts(.:format)    posts#create 
      new_post GET /posts/new(.:format)   posts#new 
      edit_post GET /posts/:id/edit(.:format)  posts#edit 
       post GET /posts/:id(.:format)   posts#show 
        PATCH /posts/:id(.:format)   posts#update 
        PUT /posts/:id(.:format)   posts#update 
        DELETE /posts/:id(.:format)   posts#destroy 
       root GET /       pages#index 
       home GET /home(.:format)    pages#home 
        GET /user/:id(.:format)   pages#profile 
      connect GET /connect(.:format)    pages#connect 
       help GET /help(.:format)    pages#help 
      messages GET /messages(.:format)   pages#messages 
       new GET /new(.:format)     posts#new 
+0

簡単なユーザレコードのようなもののためにのみ、コントローラのアクション毎に一度、一度、データベースの負荷を試してみてくださいください。あなたはそれを見て、結果を投げ捨て、後でただちにIDを引き出すためにそれを再度見る。これは非常に無駄です。ユーザーと投稿の間に適切な関係がある場合は、必要に応じて '@ user.posts.all'を実行する必要があります。 – tadman

+0

あなたの最初のステップは、文字列 'testuser'がどこから来ているのかを正確に把握することだと思います。また、どのバージョンのRailsを使用していますか? Rails 4以降では、 'find_by_ *'メソッドは非推奨です。 – heyitsjhu

答えて

1

postインスタンスを渡すことならあなたは、削除

<%= link_to('Delete', post_path, :method => :delete) %> 

のリンクにIDまたはインスタンスを渡しませんでした投稿を見つけるためにリンクを削除する

<%= link_to('Delete', post_path(post), :method => :delete) %> 

または

<%= link_to('Delete', post_path(post.id), :method => :delete) %> 
関連する問題