我有两个相同的控制器以相同的方式路由:
resources :profile resources :friends
这是控制器
class ProfileController < ApplicationController
def index
@text = "profile"
end
def show
end
def new
end
def create
end
def edit
end
def update
end
def destroy
end
end
class FriendsController < ApplicationController
def index
@text = "friends"
end
def show
end
def new
end
def create
end
def edit
end
def update
end
def destroy
end
end
但是当我想在视图布局中定义菜单时,配置文件控制器会出现问题,但对于friends控制器也不会出现问题。以下是生成错误的代码:
<ul id="menu">
<li>
<%= link_to "Friends",friends_path %>
</li>
<li>
<%= link_to "Profile", profile_path %>
</li>
</ul>
,错误是:
No route matches {:action=>"show", :controller=>"profile"}
如果控制器和视图相同,为什么会发生这种情况?
答案 0 :(得分:1)
这与您为Profile控制器提供了一个单一的名称和路线这一事实有关。您可以运行rake routes
以查找路由助手的名称。查找GET /profile
,它可能类似于index_profile_path
或profile_index_path
编辑:更具体地说,错误是因为默认情况下profile_path
期望显示特定实例的助手,例如profile_path(@profile)
答案 1 :(得分:0)
尝试使用
<%= link_to "Profile", profiles_path %>
区别在于变量名称配置文件 s _path。由于索引网址的路径应为复数。
如果你的应用程序运行rake routes
,你也可以看到所有路由 - 它是一个实时保护程序来调试路由问题。