Почему флажок с default => true становится nil в качестве другого параметра вместо false? - PullRequest
0 голосов
/ 21 января 2012

У меня есть несколько флажков, которые отправляют и изменяют значение атрибута в моем профиле.Атрибут был создан как логическое значение с :default => true.Для каждого другого флажка, который я установил подобным образом, значение атрибута равно true / false.Однако этот флажок либо true, либо nil.

Несмотря на то, что все настраивается одинаково, как это возможно?Мне нужна форма, чтобы изменить только значение на true или false.Не нольКто-нибудь может мне помочь?

Вот миграция, которая добавляет столбец в мою таблицу профилей:

class AddAccessItemsToProfiles < ActiveRecord::Migration
  def self.up
    add_column :profiles, :access_items, :boolean, :default => true
  end

  def self.down
    remove_column :profiles, :access_items, :boolean, :default => nil
  end
end

(Прежде чем я продолжаю, я замечаю, что self.down равен :default => nil,но у меня есть это в других миграциях, которые работают. Плюс я не думал, что это вызовет проблему.)

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

def access_items_settings
  if current_user.profile.update_attributes(:access_items => params[:access_items])
    redirect_to settings_path
  else
    redirect_to settings_path, :notice => 'Oops, something went wrong. Please try again.'
  end
end

Здесьэто форма, которую я отправляю:

<%= form_tag(access_items_settings_path, :method => :put) do %>
  <p class="setting"><%= check_box_tag(:access_items, 1, @user.profile.access_items ? true : false) %>
  &nbsp;This lets your items be accessed.
  <br><span class="indentClarify">(Some details.)</span></br></p>
<% end %>

(я удалил лишние br, p, span, но это ничего не сделало.)

И, наконец, jQuery:

$(function(){
    $(':checkbox').live('click',function() {
        $(this).closest('form').submit();
    });
});

1 Ответ

1 голос
/ 21 января 2012

Это не имеет никакого отношения к значению базы данных по умолчанию.

Когда флажок снят, при просмотре вообще не отправляется значение, поэтому params[:access_items] равно нулю, и именно это сохраняется в базе данных (посколькуваш столбец допускает нулевые значения).Помощник rails check_box (в отличие от check_box_tag) использует скрытое поле, так что непроверенное поле также представляет значение.Возможно, вы захотите использовать ту же технику.

Я не знаю, что отличает эти другие флажки, поэтому не могу их комментировать.

...