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