2011-02-02 32 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操作是手動生成的,因此會回退到最後一行。