2012-01-31 7 views
1

У меня есть 2 scaffolds Роль (имя: строка), Permission (name: string) Я создал связь между ними. Итак, теперь я могу легко разрешать разрешения для ролей: Role.permissions.Дополнительные поля в форме

Проблема заключается в том, чтобы создать форму для новой роли, потому что в дополнение к полю «имя» я хотел бы добавить туда список разрешений (флажки).

Это то, что мне удалось сделать до сих пор. (Сейчас я использую текстовое поле вместо флажка)

<%= form_for(@role) do |f| %> 
    <% if @role.errors.any? %> 
    <div id="error_explanation"> 
     <h2><%= pluralize(@role.errors.count, "error") %> prohibited this role from being saved:</h2> 

     <ul> 
     <% @role.errors.full_messages.each do |msg| %> 
     <li><%= msg %></li> 
     <% end %> 
     </ul> 
    </div> 
    <% end %> 

    <div class="field"> 
    <%= f.label :name %><br /> 
    <%= f.text_field :name %> 
    </div> 

    <div class="list_of_fields"> 
    <div class="field"> 
     <%= text_field_tag :myVariable] %> 
    </div> 
    </div> 

    <div class="actions"> 
    <%= f.submit %> 
    </div> 
<% end %> 

Точно я говорю об этом куске кода:

<div class="list_of_fields"> 
    <div class="field"> 
     <%= text_field_tag :myVariable] %> 
    </div> 
    </div> 

Это производит:

Параметры: {» utf8 "=>" â ", " authenticity_token "=>" MdS0VkLAxGoZM8P71H0a9M54CpMt8DnnwSp75UVGtqE = ", " role "= {" name "=>" abc "}," myVariable "=>" xyz "," commit "=>" Создать роль "}

Мне не нравится это решение, потому что, если кто-то выбирает определенное имя разрешения, он может потерпеть неудачу (например, «совершить»).

Я хотел бы закрыть все эти дополнительные поля внутри хеша. Каков правильный способ сделать это?

ответ

2

Посмотрите на Railscast 189 - embedded association. Райан решает, что именно вы хотите здесь сделать. Он немного стар и использует роли, встроенные в пользовательскую модель, но вы должны быть в состоянии адаптировать их.

Кроме того, вы можете рассмотреть возможность использования cancan для разрешений на основе ролей (railscast here)

Смежные вопросы