рельсы: редактирование сериализованных данных в форме - PullRequest
2 голосов
/ 06 февраля 2011

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

Моя модель выглядит следующим образом:

class Search < ActiveRecord::Base
  serialize :params
end

И форма:

<%= form_for @search do |f| %>
  <%= f.fields_for :params, @search.params do |p| %>
    <%= p.label :square_footage, "Square Footage:" %>
    <%= p.text_field :min_square_footage, :size => 10, :placeholder => "Min" %>
    <%= p.text_field :max_square_footage, :size => 10, :placeholder => "Max" %>
  <% end %>
  ...
<% end %>

И в методе создания контроллера:

@search = Search.new(params[:search])
@search.params ||= Hash.new
logger.info("search = #{@search.inspect}")

В журналах:

search = #<Search id: nil, params: {"min_square_footage"=>"1200", "max_square_footage"=>"1500"}, created_at: nil, updated_at: nil>

Таким образом, вы можете видеть значения, полученные POSTed.

На мой взгляд, над формой я добавил эту строку, чтобы посмотреть, смогу ли я хотя бы получить доступ к значениям:

<%= @search[:params][:min_square_footage] %>

И смогу.

Так что если я смогудоступ к значениям в моем представлении, и форма успешно отправляет данные в мой контроллер, почему моя форма не может отображать данные?

Ответы [ 2 ]

0 голосов
/ 07 февраля 2011

Я думаю, что вам нужно отношение объект - метод для значений, которые будут заполнены по умолчанию в форме. Методы вызываются Rails для заполнения формы. Вы можете написать методы в модели поиска для двух данных min_square_footage и max_square_footage, как это

class Search < ActiveRecord::Base
  serialize :params

  def min_square_footage
    params[:min_square_footage] unless params.blank?
  end

  def max_square_footage
    params[:max_square_footage] unless params.blank?
  end
end

и в просмотрах:

<%= form_for @search do |f| %>
  <%= f.label :square_footage, "Square Footage:" %>
  <%= f.text_field :min_square_footage, :size => 10, :placeholder => "Min" %>
  <%= f.text_field :max_square_footage, :size => 10, :placeholder => "Max" %>
  ...
<% end %>
0 голосов
/ 06 февраля 2011

это работает:

<%= p.text_field :min_square_footage, :size => 10, :placeholder => "Min", :value => @search[:params][:min_square_footage] %>
<%= p.text_field :max_square_footage, :size => 10, :placeholder => "Max", :value => @search[:params][:max_square_footage] %>

но не идеально. рельсы должны автоматически соединять значения форм, не так ли?

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