Ruby on rails 通过表单和向联接表添加属性,具有多个

Ruby on rails 通过表单和向联接表添加属性,具有多个,ruby-on-rails,ruby,simple-form,has-many-through,Ruby On Rails,Ruby,Simple Form,Has Many Through,这是我的第一个stakoverflow问题,对Rails来说是相当陌生的。我已经搜索了以前类似的问题,但似乎无法找出这一个。我与用户和帐户有一个has_many-through关系,并且在UserAccount模型(联接表)上有一个额外的布尔属性“account_admin”。我正在尝试在创建一个新帐户时如何设置它 用户: 谢谢你的建议。感谢客户模式: 您希望一个帐户有多个管理员,还是每个帐户只有一个管理员?一个帐户可以有多个管理员。谢谢你的关注,谢谢。我希望能够将多个用户分配给该帐户,这就是为

这是我的第一个stakoverflow问题,对Rails来说是相当陌生的。我已经搜索了以前类似的问题,但似乎无法找出这一个。我与用户和帐户有一个has_many-through关系,并且在UserAccount模型(联接表)上有一个额外的布尔属性“account_admin”。我正在尝试在创建一个新帐户时如何设置它

用户:

谢谢你的建议。感谢

客户模式:
您希望一个帐户有多个管理员,还是每个帐户只有一个管理员?一个帐户可以有多个管理员。谢谢你的关注,谢谢。我希望能够将多个用户分配给该帐户,这就是为什么我在原始版本中有:as=>:复选框的原因。是否有一种方法可以将每个用户显示为一个复选框,然后再显示一个帐户管理复选框?我已经编辑了我的答案,这是一个演示项目,其中包含以下示例:真棒-我认为还有一个小错误。我尝试了你的github项目,当我选中两个不同的用户时,它会将相同的用户id插入用户帐户两次。你知道会发生什么吗?这是最基本的事情,你可以使用一些验证来修改它,等等。关于重复的用户id,你可以检查帐户形式中的两个块,我猜这两个块中有冗余,你可以尝试使用新的数据库。希望有帮助
class User < ActiveRecord::Base
  has_many :user_accounts, :dependent => :destroy
  has_many :accounts, :through => :user_accounts
  ..
end
class Account < ActiveRecord::Base
  has_many :user_accounts, :dependent => :destroy
  has_many :users, :through => :user_accounts
end
class UserAccount < ActiveRecord::Base
  belongs_to :user
  belongs_to :account
  # includes account_admin boolean
end
= simple_form_for @account do |f|
  = f.input :name
  = f.input :description
  = f.association :users, label_method: :to_label, :as => :check_boxes
  = f.button :submit
class Account < ActiveRecord::Base
  attr_accessible :name, :description,  :user_accounts_attributes
  has_many :user_accounts, :dependent => :destroy
  has_many :users, :through => :user_accounts
  has_many :user_without_accounts, :class_name => 'User', :finder_sql => Proc.new {
       %Q{
         SELECT *
         FROM users where id NOT IN (Select user_id from user_accounts where account_id = #{id})
       }
   }

  accepts_nested_attributes_for :user_accounts, reject_if:  proc { |attributes| attributes['user_id'] == '0' }

 def without_accounts
    new_record? ? User.all :  user_without_accounts
 end
end
= simple_form_for @account do |f|
  = f.input :name
  = f.input :description
  - @account.user_accounts.each do |user_account|
  = f.simple_fields_for :user_accounts, user_account do |assignment|
    = assignment.check_box :user_id
    = assignment.label :user_id, user_account.user.name rescue raise  user_account.inspect
    = assignment.input :account_admin
    %hr
  - @account.without_accounts.each do |user|
    = f.simple_fields_for :user_accounts, @account.user_accounts.build do |assignment|
    = assignment.check_box :user_id
    = assignment.label :user_id, user.name
    = assignment.input :account_admin
    %hr
  = f.button :submit