2012-03-09 51 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