2015-04-03 11 views
0

我正在爲練習創建聚會規劃應用程序,並遇到了一些麻煩。我需要能夠在點擊時顯示我的特定聚會,但似乎並不奏效。我得到這個錯誤:重定向到節目,但無法在Ruby中找到ID參數

未定義的方法`show_party_path」爲#<#:0x007fb115660620>

我在各方控制器定義的顯示方法是這樣的:

def show 
    @party = Party.find(params[:id]) 
    end 

index.html.erb

<table> 
     <tr> 
     <% @parties.each do |party| %> 
     <tr> 
      <td><p><%= link_to party.title, show_party_path(@party) %></p></td> 
      <td><p><%= party.start_time %></p></td> 
      <td><p><%= party.end_time %></p></td> 
      <td><p><%= party.address %></p></td> 
      <td><p><%= party.city %></p></td> 
      <td><p><%= party.state %></p></td> 
      <td><p><%= party.zipcode %></p></td> 
      <td><p><%= party.phone %></p></td> 
      <td><p><%= party.email %></p></td> 
      <td><p><%= party.url %></p></td> 
     <td><%= link_to "Remove", party, method: :delete, data: { confirm: "Are you sure?" } %></td> 
     </tr> 
     <% end %> 
     </tr> 
    </table> 

    <%= link_to "New Party", new_party_path %> 

Interstingly,當我點擊節目時,它也有一個奇怪的網址。它從localhost:3000到localhost:3000/parties。它沒有指定實際的參與者ID。在沒有輸入參數的情況下,節目將如何知道顯示哪一方?

任何幫助,非常感謝。

我的路線:

Prefix Verb URI Pattern     Controller#Action 
    parties GET /parties(.:format)   parties#index 
      POST /parties(.:format)   parties#create 
new_party GET /parties/new(.:format)  parties#new 
edit_party GET /parties/:id/edit(.:format) parties#edit 
    party GET /parties/:id(.:format)  parties#show 
      PATCH /parties/:id(.:format)  parties#update 
      PUT /parties/:id(.:format)  parties#update 
      DELETE /parties/:id(.:format)  parties#destroy 
     root GET /       parties#index 

最佳, 埃裏克

+1

使用'耙routes'顯示您的可用路徑。 'show'派對路徑默認爲'party_path(@party)'。 – pierallard 2015-04-03 16:25:34

+0

如果rake路由中的格式是party GET /parties/:id(.:format)parties#show does not mean show需要localhost:3000/parties/party_id的url嗎?如何更改網址以包含party_id? – 2015-04-03 16:33:00

+1

正如ForgetTheNorm所示:'party_path(@party)'會將id添加到url – Klaus 2015-04-03 16:38:45

回答

0

看起來你漏掉了什麼路線聲明..

get "/parties/:id", to: "parties#show", as: "show_party" 

認爲這是你是什麼後。

1

只需添加一些額外的細節和上下文來進一步回答你的問題。

假設的基礎上,rake routes結果,您config/routes.rb文件中有這樣的吧:

resources :parties 

然後,對於免費的,你會爲你七種不同的路線自動生成,所有這些都涉及到RESTful CRUD操作。一個問題在這裏,當然是閱讀,並通過聲明上面的線,在後臺,您可以:

get '/parties/:id', to: 'parties#show', as: 'parties' 

現在,對於其他方法正常的邏輯的確會說使用show_party_path,但是這是一個因爲您正在使用資源豐富的路由。 「秀」部分顯然被認爲是多餘的。

所以,相反,簡單地改變你的link_to呼籲:

link_to @party.title, party_path(@party) 

傳遞@party基本上通過@party.id作爲參數。

臨提示:你也可以這樣做:

link_to @party.title, @party 

要達到同樣的效果。

我會絕對建議不要編輯您的路由配置強制支持show_party_path,因爲這將與您做的任何其他路由不一致,並且不必要地違反規範和實踐。一般來說,Rails很容易在其規則的範圍內工作 - 而事實恰恰相反。

有關路由的詳細信息,請訪問: http://guides.rubyonrails.org/routing.html