2011-02-02 61 views
0

我在我的一个视图(ProjectController中的索引动作)中有以下两行代码下面的代码是循环在@projects实例变量作为project循环。Rails窗体助手问题与链接到

<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

你能张贴你的路线吗? – 2011-02-02 02:28:36

+0

谢谢!在我的`routes.rb`文件中有一个问题,它有一个条目:`get“project/edit” – 2011-02-02 02:38:34

+0

你能解释为什么这行代码阻止Rails按我预期的方式行事......?只是好奇 – 2011-02-02 02:39:23

回答

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,它会给你喜欢的观点:)

0

我不知道为什么你用相同的语法得到不同的结果,但他们都不是正确的,我认为原因是当link_to使用url_for来创建路径时:id参数不被传递。

我认为,你可以使用这些例子假设你使用资源的一方:项目在你的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> 
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 
REST非RESTful Rails应用程序

问题是由Routes.rb文件创建的。我在我的routes.rb文件的底部为我的路线设置了一条全线路线 - 这是现在在Rails 3中已弃用的东西。0和Rails 3.0现在鼓励资源路由。

当我生成我的项目控制器时,它将这些获取行添加到路由文件中。这些获取行对应于我通过控制台生成控制器时定义的操作。而show操作是手动生成的,因此会回退到最后一行。