Использование флажка для изменения логического атрибута модели (рельсы) - PullRequest
3 голосов
/ 15 сентября 2011

Я делаю приложение со списком продуктов, в котором я хотел бы позволить пользователям отмечать товары, которые они поместили в корзину. Я хотел бы сделать это, переключая атрибут «найдено» с ложного на истинное (в моей модели «предмет»).

Вот код, который у меня есть для этого:

<% for item in @items %>
    <tr>
        <td><%= check_box, item, :found, {}, true, false %></td>
        <td><%= item.quantity %></td>
        <td><%= item.name %></td>
        <td><%= item.category %></td>
    </tr>
    <br />
<% end %>

У меня есть ссылка «обновить» внизу страницы. В списке много элементов, и когда я прошу обновить список, я предполагаю, что я также обновляю атрибуты элементов в этом списке.

<%= link_to "Update", @list, :method => :put %> |

Вот действие обновления в моем контроллере списка:

  def update 
    @list = List.find(params[:id])
    if @list.update_attributes(params[:list])
      flash[:notice] = "Successfully updated list"
      redirect_to @list 
    else 
      render :action => 'edit'
    end 
  end

Мне кажется, я правильно следую документации для check_box. Тем не менее, каким-то образом «найденный» логический тип остается ложным после обновления. Кто-нибудь знает, как правильно это реализовать? Я бы не хотел пока использовать AJAX. Спасибо!

Ответы [ 2 ]

2 голосов
/ 15 сентября 2011

Я ненавижу ссылки на мой собственный блог, но в этом случае вы можете проверить его , поскольку он имеет прямое отношение (и IMO, намного красивее, чем полное решение для цикла запросов).

1 голос
/ 15 сентября 2011

Есть ли вероятность, что ваша модель может иметь атрибут attr_accessible для некоторых атрибутов или attr_protected on: found?

Попробуйте изменить атрибуты update_attributes на update_attributes! и посмотрим, получишь ли ты больше информации.

Некоторые другие предложения могут включать сброс параметров в журнал, попробуйте выполнить прямое назначение модели (например, item.found = params [: found] == '1'), убедитесь, что вы установили флажок 1 или 0 правильно интерпретируется как логическое значение true, false.

...