表格中的其他字段

时间:2012-01-31 18:04:24

标签: ruby-on-rails ruby-on-rails-3.1

我有2个脚手架Role(name:string),Permission(name:string)我创建了它们之间的关系。所以现在我可以轻松地显示角色的权限:Role.permissions。

问题是要为新角色创建一个表单,因为除了字段'name'之外,我还想添加一个权限列表(复选框)。

这是我到目前为止所做的。 (现在我使用的是文本框而不是复选框)

<%= 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”=&gt;“â”,   “authenticity_token”=&gt; “中MdS0VkLAxGoZM8P71H0a9M54CpMt8DnnwSp75UVGtqE =”,   “role”= {“name”=&gt;“abc”},“myVariable”=&gt;“xyz”,“commit”=&gt;“创建角色”}

我不喜欢这个解决方案,因为如果有人选择了特定的权限名称,它可能会失败(例如'commit')。

我想在哈希中关闭所有这些附加字段。什么是正确的方法?

1 个答案:

答案 0 :(得分:2)

看看Railscast 189 - embedded association。瑞安完全解决了你在这里想要做的事情。它有点旧并且使用嵌入在用户模型中的角色,但您应该能够适应它。

此外,您可以考虑将cancan用于基于角色的权限(railscast here