Ruby on rails 如何将集合复选框默认为选中?

Ruby on rails 如何将集合复选框默认为选中?,ruby-on-rails,ruby,checked,Ruby On Rails,Ruby,Checked,我有一行,我正在尝试默认选中 在数据库中,文本“已提交” 我尝试了checked和true的变体,但也许我忽略了什么 这是它的。您正在为使用表单,因此f是一个表单生成器。这意味着它被绑定到初始化它的对象,我们称之为@habity。由于您正在表单生成器上调用集合\u复选框,它将执行类似于@habity.send(:commit)的操作,以查看是否应选中该复选框,而当前(显然)该复选框未选中。换句话说,如果您想使用表单_,您需要在模型本身中表示“一切都已检查”的事实 现在我不确定您的模型层是什么样子

我有一行,我正在尝试默认选中

在数据库中,文本“已提交”

我尝试了
checked
true
的变体,但也许我忽略了什么


这是它的

您正在为
使用
表单,因此
f
是一个表单生成器。这意味着它被绑定到初始化它的对象,我们称之为
@habity
。由于您正在表单生成器上调用
集合\u复选框
,它将执行类似于
@habity.send(:commit)
的操作,以查看是否应选中该复选框,而当前(显然)该复选框未选中。换句话说,如果您想使用表单_,您需要在模型本身中表示“一切都已检查”的事实

现在我不确定您的模型层是什么样子,所以我将介绍几个场景。如果您有一个
has\u和\u属于\u many
关系,如下所示:

class Habit < ActiveRecord::Base
  has_and_belongs_to_many :committed_days
end

class CommittedDay < ActiveRecord::Base
  has_and_belongs_to_many :habits
  # let's assume it has the columns :id and :name
  # also, let's assume the n:m table committed_days_habits exists
end
def new
  @habit = Habit.new
  @habit.committed_day_ids = CommittedDay.all.map(&:id)
end
t.text :committed, default: Date::ABBR_DAYNAMES.map(&:downcase).to_yaml
在你的雇员再培训局:

<%= f.collection_check_boxes(:committed_day_ids, CommittedDay.all, :id, :name)
如果不使用Postgres,则可以使用Rails序列化,这与数据库无关:

class Habit < ActiveRecord::Base
  serialize :committed, Array
end

下面是一个关于如何将checked作为默认值添加到collection\u check\u box form helper的快速答案,因为我花了一些时间才弄清楚。将其分解为一个块,您可以设置checked并添加类。更多信息请访问



当你在db
t.text中说“已提交”
时-你在说哪个表?你能简要描述一下你正在研究的模型吗?同意。该属性必须与模型关联。通常,我发现在查找预选中的项目时,最好从另一个表中选择收集复选框。因为在你的控制器里你可以做嵌套attributes@AmitA我用要点更新了这个问题。希望这能给我一个更好的主意,因为我不太清楚你的要求。@HunterStevens谢谢你提供的细节!我用一个要点更新了这个问题。这是一个新习惯的表单,更新一个,还是两者都更新?运行rails g migration name_of_migration并编辑文件。太棒了!你是一个活生生的储蓄者。
# downcase is used since in the ERB you are using :downcase for the id method
t.text :committed, default: Date::ABBR_DAYNAMES.map(&:downcase), array: true
class Habit < ActiveRecord::Base
  serialize :committed, Array
end
t.text :committed, default: Date::ABBR_DAYNAMES.map(&:downcase).to_yaml
<%= f.collection_check_boxes(:author_ids, Author.all, :id, :name) do |b| %>
  <%= b.label(class: "check_box") { b.check_box(checked: true, class: "add_margin") + b.text } %>
<% end %>