【问题标题】:How to save checkbox values to database?如何将复选框值保存到数据库?
【发布时间】:2014-06-16 12:00:03
【问题描述】:

我需要一些帮助。我有一个客户和分配模型。分配表已经充满了数据。当我创建客户端时,我添加了带有分配给客户端创建表单的复选框。复选框由分配表中的数据填充。管理员可以选择将哪些分配添加到客户端并保存客户端和客户端分配。现在我想知道管理员提交表单后如何保存 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 表中创建新行?谢谢!

【问题讨论】:

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


【解决方案1】:

就像其他人评论的那样,看起来你需要 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 处理。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-03-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-10
    • 2011-08-23
    相关资源
    最近更新 更多