check_box_tag не меняет значение, когда атрибут имеет значение true или false - PullRequest
1 голос
/ 14 января 2012

У меня есть check_box_tag для формы, которая обновляет атрибут профиля пользователя :show_hometown.Когда я отправляю форму для переключения значения :show_hometown, значение флажка ввода равно «1» независимо от изменения атрибута.Может кто-нибудь помочь мне понять, что я делаю неправильно?

Вот моя форма:

<%= form_tag({:action => "edit_show_hometown_settings", :controller => "profiles"}, :html => {:multipart => true }) do %>
<%= check_box_tag :show_hometown, 0, 1 %>
<%= @user.profile.hometown %>
<% end %>

Вот действие в контроллере, откуда я обновляю атрибут:

def edit_show_hometown_settings
  @profile = current_user.profile
  if @profile.show_hometown == true
    if @profile.update_attributes(:show_hometown => false)
      redirect_to settings_path
    else
      redirect_to settings_path, :notice => 'Oops, something went wrong. Please try again.'
    end
  elsif @profile.show_hometown == false
    if @profile.update_attributes(:show_hometown => true)
      redirect_to settings_path
    else
      redirect_to settings_path, :notice => 'Oops, something went wrong. Please try again.'
    end
  end
end

И, наконец, миграция, которую я использовал для создания атрибута :show_hometown:

t.boolean :show_hometown, :default => true

1 Ответ

0 голосов
/ 09 марта 2012

Попробуйте:

@profile.show_hometown == false || @profile.show_hometown == "0"

Флажок будет возвращать значение «0», а не false, и, очевидно, ruby ​​не всегда понимает «0» как false (моя платформа разработки понимает «0» как false, но моя производственная платформа не делает, и я не знаю причину; это, вероятно, версия ruby).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...