Как сравнить параметры формы Rails? - PullRequest
1 голос
/ 12 апреля 2011

Итак, я делаю программу со скриптом «Набор шагов для выполнения задачи», которая может быть применима ко всем магазинам или только к избранным. Опция all store - это логическое значение, которое сохраняется в скрипте. То, что я хотел бы сделать, это когда вы выбираете «Да» для всех магазинов, он должен удалить все магазины, связанные с этим сценарием, если они есть. Таблицы сценариев и хранилищ имеют отношение HABTM. Вопрос в том, как проверить внутри параметра, чтобы увидеть, является ли значение all_stores истинным? Я пробовал несколько вещей, и он, кажется, просто игнорирует оператор if, чтобы сравнить параметр всех магазинов с истинным

Контроллер скриптов

  def update
    params[:script][:store_ids] ||= []
    if params[:script][:all_stores] == true
      params[:script][:store_ids] = []
    end
    @script = Script.find(params[:id])
    if @script.update_attributes(params[:script])
      flash[:notice] = 'Script was successfully updated'
      redirect_to :action => 'index'
    else
      @categories = category_search
      render :action => 'edit'
    end
  end

Просмотр сценариев

<%= form_for(:script, :url => {:action => 'update', :id =>@script.id}) do |f| %>
    <div id="script_form_visibility">
        <div class="issue_section_header" align="center">Visibility</div>
        <div class="line-break"></div>
        <div class="standardText"><span class="boldText">All Stores:</span> <%=f.radio_button(:all_stores, true)%> Yes <%=f.radio_button(:all_stores, false)%> No</div>
        <br/>
        <div class="issue_section_header" align="center">Stores</div>
        <div class="line-break"></div>
        <div class="standardText">
            <%@stores.each do |store|%>
                <%= check_box_tag 'script[store_ids][]', store.id, @script.store_ids.include?(store.id), :id => dom_id(store) %>
                <%= label_tag dom_id(store), store.name, :class => "check_box_label" %><br/>
            <%end%>
        </div>
    </div>
    <div id="script_form">
        <div class="boldText"><%= f.label :name %></div>
        <div><%=f.text_field :name, :size => '94', :maxlength => '70'%></div>
        <div>
            <table width="100%" cellspacing="0">
                <tr>
                    <td class="boldText"><%= f.label :category_id, "Category" %></td>
                    <td class="boldText" align="right">Show ID Required Field</td>
                </tr>
                <tr>
                    <td class="standardText"><%=f.select(:category_id, @categories.collect {|c| [c.name, c.id]}, :selected => session[:admin_category])%></td>
                    <td class="standardText" align="right"><%=f.radio_button(:require_id, true)%> Yes <%=f.radio_button(:require_id, false)%> No</td>
                </tr>
            </table>
        </div>
        <div class="boldText"><%= f.label :task %></div>
        <div><%= f.text_area(:task, :size => "68x20") %></div>
        <div class="boldText"><%= f.label :expected_results, "Expected Results" %></div>
        <div><%= f.text_area(:expected_results, :size => "68x20") %></div>
        <div align="center"><%= f.submit "Update Script" %></div>
    </div>
<% end %>

1 Ответ

0 голосов
/ 12 апреля 2011

Подобные проблемы легко решаются в отладчике рельсов.Запустите его и затем установите точку останова в этой строке:

if params[:script][:all_stores] == true

Когда вы достигнете примера точки останова, содержимое вашего хэша params

(rdb:3) p params[:script][:all_stores]

Это скажет вам, почему ваш код нене ведет себя, как ожидалось.

...