检测current_page?在导航部分不工作

时间:2014-08-11 10:09:29

标签: ruby-on-rails haml

这是' shared / subnav'的代码。部分。当我点击链接时,它会显示错误No route matches {:action=>"show", :controller=>"location"} ,但会定义路由。我认为下面的代码存在一些问题。

-if current_page? location_path
  = link_to 'Edit Location', edit_location_path
-if current_page? user_path
  = link_to 'Edit User', edit_user_path
-if current_page? alert_path
  = link_to 'Edit Alert', edit_alert_path

这是我的路线

location GET    /locations/:id(.:format)                        locations#show
user     GET    /users/:id(.:format)                            users#show
alert    GET    /alerts/:id(.:format)                           alerts#show

4 个答案:

答案 0 :(得分:2)

根据您的路线,您无法获得位置,用户和提醒的edit行为路线。您有show个操作的路由,因此为所有三个实体添加edit的路由,然后您需要传递要编辑的对象:

-if current_page? location_path
  = link_to 'Edit Location', edit_location_path(current_location)
-if current_page? user_path
  = link_to 'Edit User', edit_user_path(current_user)
-if current_page? alert_path
  = link_to 'Edit Alert', edit_alert_path(current_alert)

current_locationcurrent_usercurrent_alert是您要修改的对象。

答案 1 :(得分:1)

您的路线助手已定义,但期待参数。例如,edit_user_path期望传递user对象,因此它知道您要编辑哪个用户。

对于用户而言,您可以使用edit_user_path current_user之类的内容,但对于其他对象,您可能需要pass them in to your partial

答案 2 :(得分:1)

与current_page相比,您的节目路径也需要一些id值。看看下面的代码,这将解决你的问题。

-if current_page? location_path(current_location or some id)
  = link_to 'Edit Location', edit_location_path(current_location or some id)
-if current_page? user_path(current_user or some id)
  = link_to 'Edit User', edit_user_path(current_user or some id)
-if current_page? alert_path(current_alert or some id)
  = link_to 'Edit Alert', edit_alert_path(current_alert or some id)

答案 3 :(得分:1)

<强>路线

最重要的是,由于您将路线定义为成员路线,因此您需要确保将相应的 ID 传递给每个路线:

#config/routes.rb
resources :users, only: [:show, :edit]
resources :locations, only: [:show, :edit]
resources :alerts, only: [:show, :edit]

这意味着你必须将:id值传递给这些路由中的任何一个 - 可以按如下方式进行:

user_path("2")

-

错误

错误显然是在这里创建的:

-if current_page? location_path

如上所述,您需要传递有效的&#34; id&#34;到路径,允许它拉出所需的对象。您需要执行以下操作:

-if current_page? location_path("2")

但是,更紧迫的是你个人对这些方法的要求。当然,必须有一种更好的方法来管理这种逻辑的定义方式。我会尝试以下方法:

-

<强>辅助

我想我会这样做一个帮手:

#app/helpers/your_helper.rb
Class YourHelper
   def edit_current(controller, object)
      current = controller.singularize
      return link_to "Edit #{current}", eval("edit_#{current}_path(object)")
   end
end

这应该允许你打电话:

<%= edit_current(controller_name, @user) %>