2012-03-09 50 views
0

下面的代碼工作正常:回報率3初學者,麻煩路過的ID

<table border="1"> 
    <% @allevents.each do |allevent| %> 
     <tr>  
      <td><%= allevent.name %></td> 
      <td><%= button_to "View", :action => "view", :allevent_id => "0000000000000131"%> 
     </tr> 
    <% end %> 
</table> 

然而,當我換出我傳遞給ID:

<%= button_to "View", :action => "view", allevent_id %> 

它傳遞一個零值。任何想法如何我可以正確引用這個?它似乎不喜歡allevent.id,但allevent_id是零?我測試了在輸出文本中顯示allevent.id,它看起來是正確的。

參考控制器代碼:

def index 
@allevents = Event.all  
end 

也想這似乎加我的routes.rb代碼含糊:

match 'event/:action' => 'events#view' 

提前感謝!

回答

0

嘗試:

<table border="1"> 
    <% @allevents.each do |allevent| %> 
     <tr>  
      <td><%= allevent.name %></td> 
      <td><%= button_to "View", :action => "view", :allevent_id => allevent.id %> 
     </tr> 
    <% end %> 
</table> 
+0

我可以發誓我試過這個組合!它的工作,謝謝。 routes.rb是否適合您? – turbo2oh 2012-03-09 16:03:26

+1

您不應該在數據庫上下文之外引用'model.id'。正確的方法是'model.to_param',因爲有時候這些都是自定義的,以使URL更易於呈現。 – tadman 2012-03-09 16:16:13

+0

是的,我同意,如果我正確地得到了這段代碼的意思,我也在循環中使用'@ events'或'@ all_events'來代替'@ allevents'和'event'。 – ecoologic 2012-03-09 16:22:40

0

如果可能,試着和的indexshow等REST風格的命名約定堅持。使用view會產生不必要的複雜性。有時你會遇到無法直接將其映射到REST的情況,所以如果出現這種情況,請通過一切手段創建新的操作。 「視圖」應該與「顯示」相同。

使用resource :events應該達到您想要的開箱率的90%,並且您可以自定義它以不生成您不需要的路線。

這有讓您命名路由助手,可以簡化您的鏈接附加效果:

<%= button_to "View", event_path(allevent) %> 

這些是比一切都太容易出錯的手動佈線方法更爲可靠。

+0

感謝您的額外提示。我將它改爲使用show而不是view來使用event_path。我現在唯一的問題是現在點擊按鈕後我的網址是filename.eventid而不是文件名/ eventid。如果我在URL中手動更改它可以正常工作。我怎樣才能解決這個問題?我還將routes.rb中的條目更改爲: match'event /:id'=>'events#show' – turbo2oh 2012-03-09 19:28:20

+0

通常,錯誤地提交':format'選項而不是正確的路由。儘管如此,我沒有在您的示例中看到對'filename'的任何引用。 – tadman 2012-03-09 20:16:23