代码之家  ›  专栏  ›  技术社区  ›  Sam å±±

rails restful select_tag with:on_change

  •  0
  • Sam å±±  · 技术社区  · 14 年前

    所以我终于开始在轨道上使用REST了。

    我希望有一个带有产品类别的select标记,当选择其中一个类别时,我希望它在更改时更新产品。

    我以前用过

    <% 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)产品类别

    产品属于产品类别

    我该怎么做呢?

    由于产品列在产品控制器和索引操作上,我应该使用产品控制器还是应该使用产品类别控制器查找类别,如在显示操作中,然后呈现产品/索引页。

    但是我真正的问题是如何得到这个表单或任何其他选项来使用RESTfulRoutes。

    1 回复  |  直到 14 年前
        1
  •  0
  •   MBO    14 年前

    第一条路线-您需要将产品定义为资源,因此您将有助手方法: 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 %>