2010-04-09 2 views
0

그래서 마침내 레일에서 나머지를 사용하기 시작했습니다.레일 restful select_tag with : on_change

제품 범주가있는 select_tag가 있어야하고 범주 중 하나가 선택되면 변경시 제품을 업데이트하고 싶습니다.

그러나 나는 이제 show 액션을하려고하기 때문에 작동하지 않습니다

<% 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)는 has_many 나는이 작업을 수행하는 방법을

와 product_categories belongs_to

제품을 product_categories 있습니다.

제품이 제품 컨트롤러 및 색인 조치에 나열되어 있으므로 제품 컨트롤러를 사용해야합니다. 예를 들어, 표시 조치와 같은 카테고리를 찾은 다음 제품/색인 페이지를 렌더링하려면 product_categories 컨트롤러를 사용해야합니다.

하지만 진정한 문제는이 양식이나 다른 옵션을 사용하여 편안한 경로에서 작업하는 것입니다.

답변

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 %> 
관련 문제