2011-06-20 6 views
0

私はレール2.3.11で作業しています。Railsでサブミットして特定のパラメータが送信されているかどうかを確認する方法

私はすべてのための単一の保存ボタンで保存しようとしていますサブカテゴリのチェックボックスのリストを持って、各カテゴリについては

<% form_for '', :url => { :action => 'save_subcategories' } do %> 
    <% for cat in @categories %> 
    <ul class="checkboxlist" style="display:none;" rel="<%= category.id %>"> 
     <% for category in categories %> 
     <li> 
     <%= check_box_tag "#{cat.name}[subcategory_ids][]", subcategory.id, 
    category.subcategories.include?(subcategory) %><%= subcategory.name.titleize %> 
     </li> 
    <% end %> 
    </ul> 
    <% end %> 
    <%= submit_tag "Save Subcategories" %> 

に疑問を持っています。

フォームを提出すると、そのサブカテゴリのいずれかがチェックされているカテゴリのみが送信されます。また、完全にチェックされていないサブカテゴリがparams経由で送信されない他のカテゴリに対しては送信されません。だから私のアクションで

は:私のカテゴリーのいずれかが、それものparamsでカテゴリを送信していないとしてチェックサブカテゴリのどれを持っていないかのように

 def save_subcategories 
     categories = Categoryall 
     for cat in categories 
      unless params["#{ cat.name }"][:subcategory_ids].blank? 
      category_to_edit = role 
     category.subcategories.clear 
     subcategories=Subcategories.find(params["#{ cat.name }"][:subcategory_ids]) 
     category_to_edit.subcategories<<subcategories 

      end 
      end 
    redirect_to :action => 'index' 
    end 

上記のコードでエラーが発生します。

+0

コードのインデントを整理できますか。 – dangerousdave

答えて

1

特定のパラメータは、あなたが行うことができますPARAMSであるかどうかを確認するには、次の

params.include?(:parameter) 
0

は、渡されたばかりだものを見るためにあなたの行動の最初の行にこれを追加:一般未確認で

raise params.inspect 
0

をチェックボックスは送信されません(check_box_tag - one to many relationshipを参照)ので、カテゴリ内に何もない場合、送信されません。あなたはこのような何か行うことができます

def save_subcategories 
    categories = Category.all 
    for cat in categories 
    from_params = params["#{ cat.name }"] 
    unless from_params.nil? || from_params[:subcategory_ids].blank? 
    category_to_edit = role 
    category.subcategories.clear 
    subcategories = Subcategories.find(from_params[:subcategory_ids]) 
    category_to_edit.subcategories << subcategories 
    end 
    end 
    redirect_to :action => 'index' 
end 

を私はすべてのサブカテゴリがチェックされているとき、それはあなたのアプリケーションで何を意味するのかわからないが、何のチェックボックスが渡されていない場合、あなたはそれらすべてをクリアすることができます:

def save_subcategories 
    categories = Category.all 
    for cat in categories 
    from_params = params["#{ cat.name }"] 
    if from_params && from_params[:subcategory_ids].present? 
     if from_params[:subcategory_ids].sort != cat.subcategory_ids.sort 
     category_to_edit = role 
     category.subcategories.clear 
     subcategories = Subcategories.find(from_params[:subcategory_ids]) 
     category_to_edit.subcategories << subcategories 
     end 
    else 
     category_to_edit = role # no idea what's that and if it's needed here... 
     category.subcategories.clear 
    end 
    end 
    redirect_to :action => 'index' 
end 
関連する問題