2010-04-09 64 views
0

所以我終於開始在rails中使用rest了。rails restful select_tag with: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 action等類別,然後渲染產品/索引頁。

但我真正的問題是如何獲得此表單或任何其他選項使用寧靜的路線。

回答

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