不可否认,几天前我问过这个问题,但我并不清楚,所以我没有得到任何正确的答案。 所以我在我的网站上有这个迷你博客的东西,我注意到如果我输入无效数据(即标题太短)我从x.com/posts获得重定向 / new(或/ edit)索引(x.com/posts),尽管后期索引不存在(除了:索引在路由中添加)。
发布控制器
class PostsController < ApplicationController
before_action :find_post, only: [:show, :edit, :update, :destroy]
before_action :admin_user, except: [:show]
def show
end
def new
@post = current_user.posts.build
@categories = Category.all.where(belongs_to_posts: true)
end
def create
@post = current_user.posts.build(post_params)
if @post.save
redirect_to @post
else
render 'new'
end
end
def edit
@categories = Category.all.where(belongs_to_posts: true)
end
def update
if @post.update(post_params)
redirect_to @post
else
render 'edit'
end
end
def destroy
@post.destroy
redirect_to root_path
end
private
def find_post
@post = Post.find(params[:id])
end
def post_params
params.require(:post).permit(:description, :title, :image, :categories_id)
end
def admin_user
redirect_to(root_url) unless current_user.admin?
end
end
路由
Rails.application.routes.draw do
root
...
get 'galleries/accept' => 'galleries#accept'
resources :galleries
resources :photos
resources :posts, except: [:index]
resources :categories
resources :documents
end
_form for posts
= simple_form_for @post do |f|
= f.input :image
= f.input :title
= f.input :categories_id, :collection => @categories, label_method: :name, value_method: :id
= f.cktext_area :description, data: {no_turbolink: true}, :ckeditor => {:toolbar => 'mini'}
= f.button :submit
值得注意的是索引不存在,因为我在主页上显示帖子。谢谢你的帮助!
答案 0 :(得分:0)
要回答你的问题,我会说你应该检查你的rake routes
。您可以看到的一件事是Post#create
操作转到/posts
,这是为新资源定义RESTful应用程序路由的方式。
使用RESTful应用程序时,在处理资源时调用的操作很大程度上取决于在资源上调用的HTTPMethod。
对create
路由的POST
请求会触发\posts
操作,而index
请求会向GET
请求触发\posts
Cheatsheet:
create => POST to /posts
index => GET to /posts
update => PATCH to /posts/:id
show => GET to /posts/:id
destroy => DELETE to /posts/:id
edit => GET to /posts/:id/edit
new => GET to /posts/new
路线
posts/new
现在你想知道它为什么仍然在同一页面上显示你的render 'new'
表单,这是因为你在Post#create
操作中调用了new
方法,这实际上是在说此(创建)操作的this.orbit.position.add(travel);
this.camera.position.sub(travel.applyQuaternion(this.orbit.quaternion));
视图。
我希望你现在能更好地理解这一点。