微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

ruby-on-rails – Ruby on rails从视图路由到控制器中的自定义方法

我有一个控制器名称帖子.在我的/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

我是新手,我经常对路线感到困惑.我有一个static_pages控制器.在home.html.erb文件中.

我想做的是致电 –

def categoryshow
            @post = Post.find(params[:category])
end

来自/app/views/static_pages/home.html.erb的帖子控制器的’categoryshow’方法

我该如何管理?如果我使用’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 categoryshow

@post = Post.find(params[:category])

结束

在这种情况下,我收到以下错误

PostsController #categyshow中的ActiveRecord :: RecordNotFound

无法找到没有ID的帖子

其次,我尝试使用您提供的链接中提到的非资源路由:

match ':posts(/:categoryshow(/:category))'

在视图中,我使用这个:

分类

<ul class="users">

 <%= Post::CATEGORIES.each do |category| %>

 <li>

     <%= link_to category,"posts/#{category}" %>

 </li> 

<% end %>

</ul>

在这种情况下,只有当没有其他现有的资源路由匹配时,我们的非资源路由才会匹配.但是,我看到显示操作匹配,我收到此错误消息:

这是show动作:

def show

@post = Post.find(params[:id])

结束

PostsController#show中的ActiveRecord :: RecordNotFound

找不到具有id = Politics的帖子

>我真的很感激这里的任何帮助!!
>谢谢(Sidharth)

解决方法

查看 “Adding More RESTful Actions” sections of the routing docs.
resources :posts do
collection do
get 'categoryshow'
end
end

要么:

resources :posts do
  get 'categoryshow',:on => :collection
end

之后的部分讨论了如果不满足您的确切需求则添加任意路由.

请注意,路由文件是明确排序的:如果您尝试在其他东西捕获后匹配路由,则第一条路线获胜.

原文地址:https://www.jb51.cc/ruby/268555.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐