我的一个视图中有以下两行代码(ProjectController中的索引操作)下面的代码位于一个循环中,它将@projects实例变量循环为project
。
<td><%= link_to(project.name, :action => 'show', :id => project.id) %></td>
<td><%= link_to("Edit", :action => 'edit', :id => project.id ) %></td>
第一个助手给了我这个链接:
http://localhost:3000/project/show/1
等,而第二个帮助器输出:http://localhost:3000/project/edit?id=1
等我希望这两个链接遵循相同的约定。 IE浏览器。 Rails首选的那个(第一个)
这是我的控制器方法:
class ProjectController < ApplicationController
def index
@projects = Project.find(:all)
end
def new
@project = project.new
end
def edit
@project = Project.find(params[:id])
end
def show
@project = Project.find(params[:id])
end
end
为简洁起见,未显示某些行动。
更新:我得到了相同的链接?如果我使用:
<td><%= link_to(project.type, :action => 'edit', :id => project.id ) %></td>
其中type
是我数据库中项目表的另一列之一。
答案 0 :(得分:3)
确保在routes.rb
:
map.resources :posts
然后在控制台中运行rake routes
,以便您可以查看所有路线。
以下是该资源所需的链接。我将首先进行编辑,因为这是您需要帮助的地方,并记住用嵌入的ruby标签包围所有这些链接<%= %>
@post.each do |post|
link_to "Edit", edit_post_path(post)
link_to "Destroy", post, :method => :delete, :confirm => "Are you sure?"
link_to "Show", post
link_to "New Post", new_post_path
end
那些应该是该资源所需的所有链接
如果您没有使用REST,那么从长远来看它会使事情变得更容易,而且rails非常好地是一个REST API,您可以创建一个命名路由进行编辑。否则你可以添加它来格式化你的路线,但这些类型的路线不安全:
map.connect ':controller/:id/:action'
将其添加到routes.rb
,它会为您提供一个非RESTful Rails应用,其中包含REST视图:)
答案 1 :(得分:0)
我不知道为什么你会用相同的语法得到不同的结果,但它们似乎都不正确我认为原因是当link_to使用url_for创建路径时,不会传递:id参数。 / p>
我认为你可以使用其中一个假设你使用资源:routes.rb中的项目:
<td><%= link_to(project.name, { :action => 'show', :id => project.id } ) %></td>
<td><%= link_to("Edit", { :action => 'edit', :id => project.id } ) %></td>
或:
<td><%= link_to(project.name, project_path(project.id) ) %></td>
<td><%= link_to("Edit", edit_project_path(project.id) ) %></td>
答案 2 :(得分:0)
MyApplication::Application.routes.draw do
get "project/index"
get "project/new"
get "project/create"
get "project/update"
get "project/delete"
get "project/destroy"
get "project/edit" <---- Notice this line
match ':controller(/:action(/:id(.:format)))'
end
问题是由Routes.rb文件以某种方式创建的。我在routes.rb文件的底部有一个catch-all routes路由到我的路由 - 这在Rails 3.0中现已弃用,Rails 3.0现在鼓励资源路由。
当我生成项目控制器时,它将这些获取行添加到路径文件中。这些获取行对应于我通过控制台生成控制器时定义的操作。而show
动作是手动生成的,因此会回到最后一行。