链接重定向到“显示”操作,而不是routes.rb中指示的操作

时间:2010-05-20 17:06:00

标签: ruby-on-rails

我正在使用Ruby on rails 2.3.4,我希望有一个链接,在点击时执行一个动作。

routes.rb文件的相关部分如下所示:

map.search_filter_relevance "/anuncios/buscar", :controller => 'announcements', :action => 'search_filter_relevance'

我的观点(这是模型的索引页面)如下所示:

<%=  link_to 'M&Aacute;S RELEVANTES', search_filter_relevance_path %>

我的控制器看起来像这样:

  def search_filter_relevance
    raise params.inspect
    unless params[:announcements].nil? or params[:announcements].empty?
      @announcements = params[:announcements].order_by_featured

    end
  end

问题是当我点击链接时,由于Show动作中的某些空值,我得到一个错误!我根本没有访问那个动作......为什么要执行它?

修改

以下是路线输出:

search_filter_relevance_announcements GET    /anuncios/search_filter_relevance(.:format)        {:controller=>"announcements", :action=>"search_filter_relevance"}
                        announcements GET    /anuncios(.:format)                                {:controller=>"announcements", :action=>"index"}
                                      POST   /anuncios(.:format)                                {:controller=>"announcements", :action=>"create"}
                     new_announcement GET    /anuncios/new(.:format)                            {:controller=>"announcements", :action=>"new"}
                    edit_announcement GET    /anuncios/:id/edit(.:format)                       {:controller=>"announcements", :action=>"edit"}
                         announcement GET    /anuncios/:id(.:format)                            {:controller=>"announcements", :action=>"show"}
                                      PUT    /anuncios/:id(.:format)                            {:controller=>"announcements", :action=>"update"}
                                      DELETE /anuncios/:id(.:format)                            {:controller=>"announcements", :action=>"destroy"}
                               search        /anuncios/buscar                                   {:controller=>"announcements", :action=>"search"}
                         power_search        /anuncios/buscar                                   {:controller=>"announcements", :action=>"power_search"}

2 个答案:

答案 0 :(得分:1)

在routes.rb文件中尝试此代码

 map.resources :announcements,:collection=>{:search_filter_relevance=>:get}

并且,在routes.rb文件中注释以下代码行

map.search_filter_relevance "/anuncios/buscar", :controller => 'announcements', :action => 'search_filter_relevance'

答案 1 :(得分:0)

当你进入控制台并

rake routes

你可以粘贴所有有search_filter_relevance和anuncios的行吗?

<强>更新 由于您要在公告控制器中调用 search_filter_relevance 操作,因此您需要使用列出的路线 search_filter_relevance_announcements_path

<%=  link_to 'M&Aacute;S RELEVANTES', search_filter_relevance_announcements_path %>

另一个选择是手动指定控制器和操作

<%=  link_to 'M&Aacute;S RELEVANTES', {:controller => "announcements", :action => "search_filter_relevance"} %>