2012-03-09 2 views
0

Следующий код работает отлично:RoR начинающие 3, проблемы с проходящими идентификаторами

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

Однако, когда я поменять идентификатор я приходящий к:

<%= 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

Я мог бы поклясться, что попробовал эту комбинацию! Это работает, спасибо. Правильно ли подходит route.rb enty? – turbo2oh

+1

Вы не должны ссылаться на 'model.id' вне контекста базы данных. Правильный метод - 'model.to_param', потому что иногда они настроены таким образом, чтобы сделать URL более презентабельными. – tadman

+0

Да, я согласен, я также использую '@ events' или' @ all_events' вместо '@ allevents' и' event' в цикле, если я правильно понял значение этого фрагмента. – ecoologic

0

Где это возможно, попробуйте и придерживаться RESTful конвенции о присвоении имен index, show и так далее. Использование view создает ненужную сложность. Иногда у вас будет случай, когда вы не можете напрямую сопоставить его с REST, поэтому, если это так, создайте новые действия. «Вид» должен быть таким же, как «показать».

Использование resource :events должно выполнять 90% того, что вы хотите из коробки, и вы можете настроить его, чтобы не генерировать маршруты, которые вам не нужны.

Это дополнительный эффект дает вам именованные хелперы маршрутизации, которые могут упростить ваши ссылки:

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

Они являются гораздо более надежными, чем ручной метод маршрутизации, который слишком легко ошибиться.

+0

Спасибо за дополнительные советы. Я изменил его, чтобы использовать show вместо view и вместо него использовать event_path. Единственная проблема, с которой я столкнулся, теперь после нажатия кнопки my url - filename.eventid вместо filename/eventid. Если я изменю его вручную в URL-адресе, он отлично работает. Как я могу это исправить? Я также изменил свою запись в routes.rb на: match 'event /: id' => 'events # show' – turbo2oh

+0

Обычно это происходит путем ошибочной отправки опции ': format' вместо правильного маршрута. Однако я не вижу ссылок на 'filename' в вашем примере. – tadman

Смежные вопросы