Ruby on rails 不能';找不到带有';id'=测试用户
当我去删除一篇文章时,我得到一个错误“找不到id=testuser的文章”。我认为这是一个路由错误,因为我认为正在运行的id应该是帖子的id,而不是用户的id?我想不出来。我可以创建帖子,但由于同样的原因不能删除或编辑 如果需要,我可以提供更多信息 PostController#destroy中提取的源位于以下位置: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
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) %>