如何将复选框值保存到数据库?

时间:2014-06-16 01:16:55

标签: ruby-on-rails checkbox ruby-on-rails-4

我需要一些帮助。我有一个客户端和分配模型。分配表已经满了数据。当我创建客户端时,我添加了复选框,其中包含对客户端创建表单的分配。复选框中填充了“分配”表中的数据。管理员可以选择将添加到客户端的分配并保存客户端和ClientAssignments。现在我想知道如何在管理员提交表单后保存ClientAssignments?我该怎么做控制器?这是我的代码:

class Client < ActiveRecord::Base
  has_many :assignments, :through => :client_assignments
  has_many :client_assignments
end

class Assignment < ActiveRecord::Base
  has_many :clients, :through => :client_assignments
  has_many :client_assignments
end

class ClientAssignment < ActiveRecord::Base
    belongs_to :client
    belongs_to :assignment
end

ClientAssignment表只有客户端ID和分配ID:

create_table "client_assignments", force: true do |t|
    t.integer  "client_id"
    t.integer  "assignment_id"
  end

复选框:

<%= f.collection_check_boxes :assignment_ids, Assignment.all, :id, :name %>

如何在控制器中获取所选复选框并在ClientAssignement表中创建新行?谢谢!

1 个答案:

答案 0 :(得分:0)

与其他评论者一样,看起来您需要has_and_belongs_to_many关联而不是has_many。当您需要关系中的额外字段时,应使用HMT,如果不仅HABTM就足够了。另请注意,由于Rails命名约定,连接表应该称为AssignmentsClients:两个模型都应该是复数并按字母顺序排序。所以你可以做到这一点:

class Client < ActiveRecord::Base
    has_many_and_belongs_to_many :assignments
end

class Assignment < ActiveRecord::Base
    has_many_and_belongs_to_many :clients
end

AssignmentsClients表迁移:

create_table :assignments_clients, id: false do |t|
    t.integer :assignment_id
    t.integer :client_id
end

所有其他人将由Rails负责。