Использование флажка для изменения логического атрибута на модели (рельсы)
Я делаю приложение со списком продуктов, в котором я хотел бы позволить пользователям отмечать товары, которые они поместили в корзину. Я хотел бы сделать это, переключая атрибут "найдено" с ложного на истинное (в моей модели "предмет").
Вот код, который у меня есть для этого:
<% 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 ответа
Есть ли вероятность, что ваша модель может иметь атрибут attr_accessible для некоторых атрибутов или attr_protected для: found?
Попробуйте изменить атрибуты update_attributes на update_attributes! и посмотрим, получишь ли ты больше информации.
Некоторые другие предложения могут состоять в том, чтобы выгрузить параметры в журнал, попытаться выполнить прямое назначение модели (например, item.found = params[:found] == '1'), убедиться, что вы установили флажок 1 или 0 правильно интерпретируется как логическое значение true, false.
Я ненавижу ссылки на свой блог, но в этом случае вы можете проверить их, поскольку они имеют прямое отношение (и IMO, намного красивее, чем решение с полным циклом запросов).