2016-01-15 2 views
1

Я пытаюсь создать форму, прочитав yml-файл. Я могу правильно прочитать файл, но я не уверен, как правильно помещать элементы в хэш в код, который создает формы. Например, мой файл YML читает что-то вродеСоздайте форму в rails, прочитав файл yaml

- f.label: :email 
    f.email_field: :email 

- f.label: :name 
    f.text_field: :name 

Я прочитал файл YML в мой контроллер, как этот

@form_format = YAML::load(File.open('public/grant.yml')) 

и код на мой взгляд, что-то вроде этого

<%= form_for(:submission, url: submissions_path) do |f| %> 
    <% @form_format.each do |item| %> 
     <% item.each do |key, value| %> 
      <%= key value %> 
      <%= key value %> 
     <% end %> 
    <% end %> 
    <%= f.submit "Apply", class: "btn btn-primary" %> 
<% end %> 

Я знаю, что это <% = ключевое значение%> бит, это неверно, но я не уверен, как его читать <% = f.label:: email%> для экзамена от значений в хеше.

Общая причина, по которой я пытаюсь понять это, состоит в том, что мне нужно создать много (100+) уникальных форм, и я подумал, что лучший способ сделать это - создать уникальную «схему» в файле yml для каждой формы и прочитать схему для создания полей. Если есть другие способы, которые лучше сделать это, я все уши. Я довольно новичок в RoR, но я искал экстенсивно и не нашел многого. Благодаря!

+0

Почему вы не просто положить, что в вашем файле миграции? – AMACB

+0

Извините - не уверен, что вы имеете в виду. Общая причина, по которой я пытаюсь понять это, состоит в том, что мне нужно создать много (100+) уникальных форм, и я подумал, что лучший способ сделать это - создать уникальную «схему» в yml-файле для каждой формы и прочитайте схему для создания полей. – gm1011

ответ

1

Вы очень близко! Тем не менее, это будет намного легче, если ваш YAML имеет только label вместо f.label, например, так:

- label: :email 
    email_field: :email 

- label: :name 
    text_field: :name 

После того, как вы загрузили этот YAML вы будете иметь массив Ruby, который выглядит следующим образом:

[ { "label" => "email", 
    "email_field" => "email" 
    }, 
    { "label" => "name", 
    "text_field" => "name" 
    } 
] 

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

Предположив вы присвоили массив к @form_format в контроллере, он будет выглядеть следующим образом, на ваш взгляд:

<%= form_for(:submission, url: submissions_path) do |f| %> 
    <% @form_format.each do |item| %> 
    <% item.each do |type, name| %> 
     <%= f.send(type, name) %> 
    <% end %> 
    <% end %> 
    ... 
<% end %>