Флажки Rails и сериализованные данные - PullRequest
1 голос
/ 19 мая 2011

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

<%= form_for @user, :url => user_notification_preferences_path(@user), :method => :put do |f| %>
  <%= f.fields_for :notification_preferences, @user.notification_preferences do |p| %>

    <%= p.check_box :notify_on_friend_post %>

    <%= p.check_box :notify_on_friend_post %>

    <%= p.check_box :notify_on_friend_request %>

    <%= p.check_box :notify_on_friend_comment %>
  <% end %>
  <%= f.submit %>
<% end %>

messages_preferences - это сериализованный хэш для моей модели пользователя

class User < ActiveRecord::Base
  serialize :notification_preferences, Hash

Моя проблема, которая не имеет значения, что я пытаюсь, я не могу получить флажки, чтобы отражать существующее состояние значений хеш-функции. То есть, если хеш уже содержит: notify_on_friend_post => 1, то флажок для этого значения должен быть установлен.

Форма отправляет данные в порядке, и я также могу обновить свою модель.

Обновление

используя check_box_tag я могу заставить это работать

<%= p.hidden_field :notify_on_friend_post, :value => "0" %>
<%= check_box_tag "user[notification_preferences][notify_on_friend_post]", "1", @user.notification_preferences[:notify_on_friend_post] == "1" ? true : false %>

ужасно, но работает, все еще надеясь, что я упускаю что-то очень очевидное

Ответы [ 2 ]

2 голосов
/ 23 августа 2012

Я столкнулся с этой проблемой и решил ее проще.

<%= form_for @user do |f| %>

  <%= f.fields_for :notifications, @user.notifications do |n| %>
    <%= n.check_box :new_task, checked: @user.notifications[:new_task] == "1" %>
  <% end %>

  <%= f.submit %>
<% end %>

Таким образом, вы позволяете магии check_box работать, и вам не нужно иметь скрытое поле, потому что Rails предоставит его вам. Все еще не уверены, зачем вам нужно «проверенное» поле, но оно, кажется, не работает без него.

1 голос
/ 20 мая 2011

Попробуйте что-то вроде этого:

 <%= form_for @user, :url => user_notification_preferences_path(@user), :method => :put do |f| %>

  <%= check_box_tag "user[notification_preferences][]", :notify_on_friend_post, @user.notification_preferences.try(notify_on_friend_post) %>

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