Здесь много чего происходит, однако, чтобы решить вашу непосредственную проблему, вы должны сделать это:
- скрипт / генерация продуктов контроллера
- создать действие
index
в контроллере продуктов
- переместите ваш код выше в
def product
к вашему новому def index
действию.
- переместить ваш взгляд с
/pages/products.html.erb
на /products/index.html.erb
.
Я собираюсь отредактировать это, чтобы объяснить почему, но сейчас это должно помочь вам начать.
Почему!
Когда вы определяете ресурс отдыха в вашем routes.rb
, например, записывая map.resources :products
, rails ожидает, что вы будете писать свои контроллеры в спокойном режиме. Для вас это означает, что если вы хотите получить ресурс по продуктам, вам понадобится ProductsController
со следующими действиями (вам нужно реализовать только те, которые вам нужны): index, show, new, create, edit, update, delete
. Это должно объяснить, почему ваш код не работал.
Я не уверен, каково содержимое вашего routes.rb
, но я предполагаю, что ваш маршрут по умолчанию все еще определен, что объясняет, почему вы можете перейти к /pages/products
.
При использовании form_for(@product)
рельсы будут генерировать <form action="/products" method="post">
, что будет соответствовать вашему действию new
.
Сказав все это, я предлагаю вам сделать следующее:
- Читайте о Ресурсы Rails .
- Сделайте так, чтобы ваше приложение было более спокойным, например, выделите страницу
/new
для продуктов, которая отображает форму, вы всегда можете <%= render :partial => 'form' %>
в других ваших действиях поделиться функциональностью нового продукта. Это поможет с тестированием и облегчит поддержку вашего кода.
- Взгляните на плагин Inherited resources . Он поможет вам в правильном направлении и, надеюсь, избавит вас от написания большого количества кода.
- Взгляните на плагин formtastic . Это поможет вам создать семантически правильные формы, сократить код вашей плиты котла и упростить вашу жизнь.
- Читайте о rails partials . Это поможет вам сузить кругозор.
У Rails может быть довольно крутая кривая обучения, но есть много литературы, чтобы помочь вам. Я надеюсь, что этот ответ направит вас в правильном направлении и даст вам возможность подумать.