Группировка по атрибутам внутри формы - PullRequest
0 голосов
/ 03 августа 2011

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

class Preference < ActiveRecord::Base

  belongs_to :school
  belongs_to :privilege
  belongs_to :user_type

end

class Privilege < ActiveRecord::Base

  has_many :preferences

end

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

    <form accept-charset="UTF-8" action="/preferences/edit" method="post">
        <table>
            <thead>
                    <td>Pivilege</td>
                    <td>Allowed</td>
                </thead>
                <tbody>
                <h2>Student User type</h2>
                <tr>
                    <td>Privilege 1<td>
                    <td>checkbox for privilege 1<td>
                </tr>
<tr>
                    <td>Privilege 2<td>
                    <td>checkbox for privilege 2<td>
                </tr>
                <h2>Employee User type</h2>
                <tr>
                    <td>Privilege 1<td>
                    <td>checkbox for privilege 1<td>
                </tr>
<tr>
                    <td>Privilege 2<td>
                    <td>checkbox for privilege 2<td>
                </tr>               
            </tbody>    
        </table>
    </form>

Проблема в том, что я не знаю, как исказить внутри блока (form_for @preferences do |f|) и сгруппировать этот массив (@preferences) по user_types.

Кто-нибудь может мне помочь? Спасибо заранее

1 Ответ

0 голосов
/ 05 августа 2011

В итоге я использовал вложенные атрибуты и проверил, принадлежит ли предпочтение этому типу пользователя (хотя я настаиваю на том, что для этого должен быть более «Rails-способ». Надеюсь, это кому-нибудь поможет:

<%= form_for @school, :url => {:controller => :preferences, :action => :update, :id => @school.id} do |f| %>
        <h2>Change Preferences</h2>     
    <% UserType.all.each do |ut|%>
         <h3><%= ut.name%></h3>
            <table>

                <thead>
                    <td>Privilege</td>
                    <td>Allowed</td>
                </thead>

                <tbody>

                <%= f.fields_for :preferences do |pref| %>
                  <% if pref.object.user_type == ut%>
                    <tr>
                      <td><%= pref.object.privilege.name%></td>
                      <td><%= pref.check_box :allowed, {:allowed => pref.object.allowed} %></td>
                    </tr>
                  <% end %>
                <% end%>
                </tbody>    

          </table>      
    <% end %>
...