Rails,has_many复选框列表 - 表单字段名称?

时间:2011-03-10 16:06:42

标签: ruby-on-rails forms checkbox erb has-many

我有一个用户模型对象,假设

class User < ActiveRecord::Base
  has_many :permissions
end

class Permission > ActiveRecord::Base
  attr_accessible :user_id, :permission_name

显然桌面上有一个id,但我们对该专栏毫无兴趣。真正的主键是user_id + permission_name。默认的foreign_key是:user_id

我们正在尝试为每个权限生成复选框,但无法在循环中生成...

有人可以解释rails如何为以下内容生成复选框名称:

 user.permissions where permission.permission_name == "some string"

或者我们如何调用.erb文件中的check_box_tag方法,以便它可以呈现一个特定的复选框,比如说'permission'是什么?

在这一点上,我有点绝望了。我发现很多例子假设主键是'id'字段,我只想循环访问权限列表,但我没有看到一个例子减去循环而不使用id作为主键。

提前感谢!

编辑:我意识到在许多用户拥有许多权限的表上,permission_name本身无效作为主键,但对于我们在表单上的用途,如果是新用户,则user_id不存在并且对于该用户,每种类型的permission_name只能有一个...也许在这种情况下,primary_key甚至不是我们关心的?

1 个答案:

答案 0 :(得分:0)

我想你正在寻找formtastic gem

控制器:

@permissions = Permission.where(:permission_name => "ted")

@permissions = @user.where(:permission_name => "ted")   

这取决于你真正想要的东西。

查看(简化):

<%= semantic_form_for :user, :url => some_path(@user) do |f| %>
  <%= f.input :permissions, :as => :check_boxes, :collection => @permissions %>
  <%= f.commit_button %>
<% end %>

在您的模型中,例如user.rb,您需要添加:

accepts_nested_attributes_for :projects