2010-04-09 4 views
0

Так что я, наконец, начинаю использовать отдых в рельсах.рельсы restful select_tag с: on_change

Я хочу иметь 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 %> 

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

У меня есть два контроллера 1) Изделия 2) product_categories

продукты BELONGS_TO product_categories с has_many

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

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

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

ответ

0

Первые маршруты - вам нужно определить продукт как ресурс, так что вы бы вспомогательные методы: 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 %> 
Смежные вопросы