我有一个控制器名称职位。在我的/config/routes.rb
,我用过这个 -
resources :posts
/app/controllers/posts_controller.rb:
class PostsController < ApplicationController
def new
@post = Post.new
end
def show
@post = Post.find(params[:id])
end
def categoryshow
@post = Post.find(params[:category])
end
def index
@posts = Post.all
end
def create
@post = Post.new(params[:post])
if @post.save
flash.now[:success] = "Your Post Successful"
redirect_to @post
else
render 'new'
end
end
end
我是 Rails 新手,经常对路线感到困惑。我有另一个 static_pages 控制器。里面有一个home.html.erb
文件。
我想做的是打电话 -
def categoryshow
@post = Post.find(params[:category])
end
帖子控制器的“categoryshow”方法来自/app/views/static_pages/home.html.erb
我该如何管理?如果我使用“posts_path”,它会转到索引操作而不是 categoryshow 操作。
#我通读了链接并从那里尝试了几件事。这是我面临的问题:
当我在 config/routes.rb 中尝试这个时
resources :posts do
collection do
get 'categoryshow'
end
end
这会生成一个“categoryshow_posts_path”
在我看来,我使用了这个:
<ul class="users">
<%= Post::CATEGORIES.each do |category| %>
<li>
<%= link_to category,categoryshow_posts_path %>
</li>
<% end %>
</ul>
我的帖子控制器有以下方法:
def 类别显示
@post = Post.find(params[:category])
结尾
在这种情况下,我收到以下错误:
ActiveRecord::RecordNotFound in PostsController#categoryshow
找不到没有 ID 的帖子
其次,我尝试使用您提供的链接中提到的非资源路由:
match ':posts(/:categoryshow(/:category))'
在视图中,我正在使用这个:
类别
<ul class="users">
<%= Post::CATEGORIES.each do |category| %>
<li>
<%= link_to category,"posts/#{category}" %>
</li>
<% end %>
</ul>
在这种情况下,我们的非资源路由只有在没有其他现有资源路由匹配时才会匹配。但是,我看到显示操作是匹配的,并且我收到以下错误消息:
这是表演动作:
定义显示
@post = Post.find(params[:id])
结尾
ActiveRecord::RecordNotFound in PostsController#show
找不到 id=Politics 的帖子
我真的很感谢这里的任何帮助!
谢谢(悉达多)