我需要一些帮助。我有一个客户端和分配模型。分配表已经满了数据。当我创建客户端时,我添加了复选框,其中包含对客户端创建表单的分配。复选框中填充了“分配”表中的数据。管理员可以选择将添加到客户端的分配并保存客户端和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表中创建新行?谢谢!
答案 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负责。