2010-04-09 65 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 %>