Rails: update_attributes не обновляет все атрибуты - PullRequest
4 голосов
/ 18 июля 2011

У меня есть простая модель под названием Дискуссия, в которой есть логический столбец с именем resolved

В моей форме есть следующий код

<%= form_for(@discussion) do |d| %>
...
<%= d.check_box :resolved %>
<% end %>

И в моем контроллере у меня есть следующее:

def update
  @discussion = Discussion.find(params[:id])
  if @discussion.update_attributes(params[:discussion])
    etc...
  end
end

Когда я отправляю форму, я вижу, что параметры отправляются на сервер ...

Parameters: {"utf8"=>"✓", "authenticity_token"=>"AsGsRHwiVva/+kTrBs0IjLeZwj1ZmXBuKZr9Pg/N6Xk=", "discussion"=>{"shortdesc"=>"Talk about something.", "content"=>"Try to update check box.", "resolved"=>"1"}, "commit"=>"Update Discussion", "id"=>"1"}

Но в запросе ничего не говорится об обновлении этого поля.

AREL (14.9ms)  UPDATE "discussions" SET "content" = 'Try to update check box.', "updated_at" = '2011-07-18 17:53:50.783176' WHERE "discussions"."id" = 1

Есть идеи о том, что мне не хватает?

Ответы [ 4 ]

18 голосов
/ 18 июля 2011

Это может происходить по четырем причинам:

  1. resolved уже имеет значение true в базе данных.
  2. Вы определили метод resolved= в своей модели, и он больше не устанавливает атрибут.
  3. У вас есть attr_protected :resolved.
  4. У вас есть attr_accessible, но у вас нет :resolved в списке.
1 голос
/ 13 апреля 2014

Все,

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

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

http://edgeapi.rubyonrails.org/classes/ActionController/StrongParameters.html

1 голос
/ 18 июля 2011

ваш логический столбец имеет значение по умолчанию? Если по умолчанию установлено значение true - рельсы могут не потрудиться добавить его в набор атрибутов.

В качестве альтернативы, у вас есть attr_protected для этого столбца? если это так - rails никогда не добавит это поле в атрибуты, используя update_attributes. Вам нужно будет сделать это вручную.

0 голосов
/ 18 июля 2011

Вы уверены, что элемент отправлен? Я имею в виду, элемент формы без проверенного элемента не отправляется, поэтому вы должны установить скрытый флажок для значения по умолчанию false.

...