Ruby on rails 不能';找不到带有';id'=测试用户

Ruby on rails 不能';找不到带有';id'=测试用户,ruby-on-rails,ruby,Ruby On Rails,Ruby,当我去删除一篇文章时,我得到一个错误“找不到id=testuser的文章”。我认为这是一个路由错误,因为我认为正在运行的id应该是帖子的id,而不是用户的id?我想不出来。我可以创建帖子,但由于同样的原因不能删除或编辑 如果需要,我可以提供更多信息 PostController#destroy中提取的源位于以下位置: def set_post @work = Work.find(params[:id]) routes.rb Rails.application.routes.draw do d

当我去删除一篇文章时,我得到一个错误“找不到id=testuser的文章”。我认为这是一个路由错误,因为我认为正在运行的id应该是帖子的id,而不是用户的id?我想不出来。我可以创建帖子,但由于同样的原因不能删除或编辑

如果需要,我可以提供更多信息

PostController#destroy中提取的源位于以下位置:

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\u 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
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

您没有在删除链接中传递id或实例

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

:删除)%>

Do try and Do数据库加载一次,对于简单的用户记录之类的事情,每个控制器操作只加载一次。你查一下,扔掉结果,然后再查一下,只是为了取下ID。这是非常浪费的。如果你在User和Post之间有一个合适的关系,你应该可以做
@User.posts.all
,如果你愿意的话。我想你的第一步是要弄清楚字符串“testuser”的确切来源。另外,您使用的是什么版本的Rails?在Rails 4+中,
find\u by.*
方法被弃用。
                  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
<%= link_to('Delete', post_path, :method => :delete) %>
<%= link_to('Delete', post_path(post), :method => :delete) %>
<%= link_to('Delete', post_path(post.id), :method => :delete) %>