рубиновый хэш к рельсам - PullRequest
       14

рубиновый хэш к рельсам

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

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

т.е. (я использую formtastic), это работает на модели ...

<%= f.input :source, :as => :select, :collection => @subject.types, :member_label => :name, :member_value => :id, :input_html => { :class => 'combobox' } %>

Но не на моем хэше.

Мой вопрос, как я могуиспользуйте внешний источник с помощниками rails form_for и укажите, следует ли мне выбирать этот маршрут.Я уверен, что мог бы выбрать другой маршрут, используя form_tag, а затем перебрать простой хэш ruby, но подумал, может быть, использование методов rails будет более элегантным и обслуживаемым?Я также не храню данные о бесплатной базе, просто ID.

Упрощенный массив / хэш:

[{:name=>"US President", :value=>"/m/02mjmr"}, {:name=>"Election campaign", :value=>"/m/047qllg"}, {:name=>"Event", :value=>"/m/057l6lw"}]

или полный хэш результатов поиска в бесплатной базе:

[{"mid"=>"/m/02mjmr", "name"=>"Barack Obama", "notable"=>{"name"=>"US President", "id"=>"/government/us_president"}, "lang"=>"en", "score"=>156.429855}, {"mid"=>"/m/047qllg", "name"=>"Barack Obama presidential campaign, 2008, General Election", "notable"=>{"name"=>"Election campaign", "id"=>"/government/election_campaign"}, "lang"=>"en", "score"=>58.741718}, {"mid"=>"/m/057l6lw", "name"=>"Barack Obama 2009 presidential inauguration", "notable"=>{"name"=>"Event", "id"=>"/event/event"}, "lang"=>"en", "score"=>57.407536}] 

1 Ответ

2 голосов
/ 08 марта 2012

Вы должны легко сделать это следующим образом:

<%= f.collection_select :freebase_id, options_from_collection_for_select(@freebase_hash, :value, :name, @object.freebase_id)

@ object.freebase_id передается в options_from_collection_for_select, чтобы он мог указать, какие (если они есть) выбираются при загрузке представления. Это важно для действий редактирования или для новых действий при повторном отображении формы после ошибок проверки.

...