我有一个控制器名称帖子.在我/config/routes.rb,我用过这个 -
resources :posts
Run Code Online (Sandbox Code Playgroud)
/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
Run Code Online (Sandbox Code Playgroud)
我是铁路新手,我经常对路线感到困惑.我有另一个static_pages控制器.在那里有一个home.html.erb文件.
我想做的是致电 -
def categoryshow
@post = Post.find(params[:category])
end
Run Code Online (Sandbox Code Playgroud)
来自的帖子控制器的'categoryshow'方法 /app/views/static_pages/home.html.erb
我该如何管理?如果我使用'posts_path',它将转到索引操作而不是categoryshow操作.
#我通读了这个链接并尝试了一些东西.这是我面临的问题:
当我在config/routes.rb中尝试这个时
resources :posts do
collection do
get 'categoryshow'
end
end
Run Code Online (Sandbox Code Playgroud)
这会生成'categoryshow_posts_path'
在我看来,我使用了这个:
<ul class="users">
<%= Post::CATEGORIES.each do |category| %>
<li>
<%= link_to category,categoryshow_posts_path %>
</li>
<% end %>
</ul>
Run Code Online (Sandbox Code Playgroud)
我的帖子控制器有以下方法:
def categoryshow
@post = Post.find(params[:category])
Run Code Online (Sandbox Code Playgroud)
结束
在这种情况下,我收到以下错误:
PostsController #categyshow中的ActiveRecord :: RecordNotFound
无法找到没有ID的帖子
其次,我尝试使用您提供的链接中提到的非资源路由:
match ':posts(/:categoryshow(/:category))'
Run Code Online (Sandbox Code Playgroud)
在视图中,我使用这个:
分类
<ul class="users">
<%= Post::CATEGORIES.each do |category| %>
<li>
<%= link_to category,"posts/#{category}" %>
</li>
<% end %>
</ul>
Run Code Online (Sandbox Code Playgroud)
在这种情况下,只有当没有其他现有的资源路由匹配时,我们的非资源路由才会匹配.但是,我看到show动作匹配,我收到此错误消息:
这是show动作:
def show
@post = Post.find(params[:id])
Run Code Online (Sandbox Code Playgroud)
结束
PostsController#show中的ActiveRecord :: RecordNotFound
找不到具有id =政治的帖子
我真的很感激这里的任何帮助!!
谢谢(Sidharth)
Dav*_*ton 16
resources :posts do
collection do
get 'categoryshow'
end
end
Run Code Online (Sandbox Code Playgroud)
要么:
resources :posts do
get 'categoryshow', :on => :collection
end
Run Code Online (Sandbox Code Playgroud)
之后的部分讨论了如果不满足您的确切需求则添加任意路由.
请注意,路由文件是明确排序的:如果您尝试在其他东西捕获后匹配路由,则第一条路线获胜.
| 归档时间: |
|
| 查看次数: |
24552 次 |
| 最近记录: |