Как проверить, отправляется ли определенный параметр через submit в Rails - PullRequest
0 голосов
/ 20 июня 2011

Я работаю на рельсах 2.3.11.

У меня есть сомнения в check_box_tag

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

Для каждой категории у меня есть список флажков подкатегорий, которыми я являюсьпытаясь сохранить с помощью одной кнопки Сохранить для всех.

Когда я отправляю форму - отправляются только те категории, в которых отмечена любая из их подкатегорий.И оно не отправляется для других категорий, чьи подкатегории, которые полностью не проверены, не отправляются через параметры.

Так в моем действии:

     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

Приведенный выше код выдает ошибку, как если бы любой из моихВ категории не отмечена ни одна из подкатегорий, поскольку она не отправляет категорию даже в параметрах.

Ответы [ 3 ]

1 голос
/ 20 июня 2011

Чтобы проверить, есть ли определенный параметр в параметрах, вы можете сделать:

params.include?(:parameter)
0 голосов
/ 20 июня 2011

Как правило, непроверенные флажки не отправляются (см. check_box_tag - отношение один ко многим ), поэтому, я полагаю, если внутри категории ничего нет, она тоже не отправляется.

Вы можете сделать что-то вроде этого:

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
0 голосов
/ 20 июня 2011

Добавьте это в первую строку вашего действия, чтобы увидеть, что передаётся:

raise params.inspect
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...