rails restful select_tag с помощью: on_change - PullRequest
0 голосов
/ 09 апреля 2010

Итак, я наконец-то начал использовать отдых на рельсах.

Я хочу иметь тег select_tag с категориями товаров, а когда выбрана одна из категорий, я хочу обновить продукты при изменении.

Я делал это раньше с

<% form_for :category, :url => { :action => "show" } do |f| %>
<%= select_tag :id, options_from_collection_for_select(Category.find(:all), :id, :name),
{ :onchange => "this.form.submit();"} %>
<% end %>

однако теперь это не работает, потому что он пытается выполнить действие show.

У меня есть два контроллера 1) продукты 2) product_categories

продукты принадлежат_категориям_продукта с has_many

Как мне это сделать.

Поскольку продукты перечислены на контроллере продуктов и в действии индекса, следует ли мне использовать контроллер продуктов или использовать контроллер product_categories, чтобы найти категорию, например в действии show, а затем отобразить страницу продукта / индекса.

Но настоящая проблема, с которой я столкнулся, заключается в том, как получить эту форму или любой другой вариант для работы с маршрутами отдыха.

1 Ответ

0 голосов
/ 09 апреля 2010

Первые маршруты - вам нужно определить продукт как ресурс, чтобы у вас были вспомогательные методы: edit_product_path(@product), new_product_path и т. Д .:

# routes.rb
map.resource :products

Затем контроллер - стандартный контроллер ресурсов:

# products_controller.rb
def edit
  @product = Product.find(params[:id])
end

def update
  @product = Product.find(params[:id])
  if @product.update_attributes(params[:product])
    flash[:notice] = "Product updated"
    redirect_to @product
  else
    render :edit
  end
end

А теперь посмотрите - пользователю проще form_for построить форму для конкретного объекта (нового или существующего). Для нового объекта он по умолчанию указывает на действие #create на контроллере для этого ресурса, а для существующих точек - на #update. При необходимости вы всегда можете переопределить эти пути:

# products/new.html.erb
<% form_for @product do |f| %>
  <%= f.select :product_category, Category.all, {}, {:onchange => "this.form.submit();" %>
<% end %>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...