【问题标题】:Routing to new action (Rails)路由到新操作(Rails)
【发布时间】:2009-01-19 13:55:22
【问题描述】:

我的 PostsController 中有一个名为“tagged”的操作,我想返回所有带有任何术语标签的帖子。

在我的 routes.rb 我有以下(在顶部):

map.connect 'posts/tagged/:tag', { :controller => 'posts', :action => 'tagged', :tag => /[a-z\-]+/ }

但导航到帖子/标记/是会返回 RecordNotFound 错误:

Couldn't find Post without an ID

在我的 tagged.html.erb 文件中,我最终将使用acts_as_taggable_on_steroids 中的 find_tagged_with 方法,但现在我放置了一个简单的 Post.find(:all) 以消除出错的可能性。

似乎我的 map.connect 被覆盖了,即使我将整个 routes.rb 文件注释掉,除了我的新行,也会出现同样的错误。

【问题讨论】:

    标签: ruby-on-rails


    【解决方案1】:

    好的,因为您可以注释掉默认路由,这意味着您的问题根本不在您的路由中。就是你在帖子控制器中标记的操作可能有这样的东西。

      def tagged
        @post = Post.find(params[:id])
    
        respond_to do |format|
          format.html # show.html.erb
          format.xml  { render :xml => @post }
        end
      end
    

    或者如果你花更多的时间,它看起来像这样:

      def tagged
        @post = Post.find(params[:tagged])
    
        respond_to do |format|
          format.html # show.html.erb
          format.xml  { render :xml => @post }
        end
      end
    

    你想要的是这个:

      def tagged
        @post = Post.find(:all, :conditions => {:tagged => params[:tagged]})
    
        respond_to do |format|
          format.html # show.html.erb
          format.xml  { render :xml => @post }
        end
      end
    

    无论如何,您应该为这些东西编写功能测试,而不是在浏览器中进行测试。

    【讨论】:

      【解决方案2】:

      为什么不为“标记”操作添加 RESTful 路由?

      map.resources :posts, :member => { :tagged => :put }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-08-01
        • 1970-01-01
        • 2015-11-02
        • 2023-04-03
        • 2021-06-20
        • 2012-06-19
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多