Ruby on Rails: лучший способ заполнить поле модели Hash или Array? - PullRequest
2 голосов
/ 26 июня 2010

У меня есть модель с сериализованным хешем в качестве поля. Я пытаюсь создать форму, которая позволяет пользователям заполнить это. Есть ли способ использовать Rails form_for helper для краткого построения хеша?

Модель - это Статья, и у Статьи может быть много авторов, которые хранятся в сериализованном хэше.

class Article
  serialize :authors, Hash
end

Хэш авторов хранит информацию о каждом авторе, который внес вклад в статью, и может иметь множество необязательных атрибутов. Авторы руководствуются порядком их появления. Вот пример того, как может выглядеть такой хеш:
{1 => {: name => "Уильям Джонс",: contrib => "Написал текст этого вопроса"}, 2 => {: name => "Билли Боб",: contrib => "Получил кофе для Уильяма ",: level =>" Minor "}

У меня есть форма, которая вроде бы подходит для этого, где я использую помощник form_for Rails, но я вынужден использовать text_field_tag ​​и другие не-специфичные для модели помощники для генерации хеша авторов. Например, где key_num - это переменная, переданная в часть:

<%= text_field_tag "article[authors][#{key_num}][name]", 
    article[authors][#{key_num}] ? article[authors][#{key_num}][:name] : nil %>

Очевидно, это чертовски уродливо и неясно. Есть ли лучший способ сделать это, я скучаю?

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

1 Ответ

1 голос
/ 26 января 2011

Я пытаюсь сделать что-то подобное, и я нашел такие работы:

<%= form_for @search do |f| %>
    <%= f.fields_for :params, @search.params do |p| %>
        <%= p.select "property_id", [[ "All", 0 ]] + PropertyType.all.collect { |pt| [ pt.value, pt.id ] } %>

        <%= 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])

так что его "наполовину" работает ...

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