ActiveAdmin :select 下拉菜单在开发中默认为当前值,但在生产中默认为空白

Posted

技术标签:

【中文标题】ActiveAdmin :select 下拉菜单在开发中默认为当前值,但在生产中默认为空白【英文标题】:ActiveAdmin :select drop-down defaults to current value in development but defaults to blank in production 【发布时间】:2014-10-19 05:03:27 【问题描述】:

我有以下 ActiveAdmin 表单:

form do |f|
  f.inputs "Timesheet Details" do
    f.input :jobs_assigned_worker, :label => "Worker", as: :select, collection: Worker.all
    f.input :worked_time_hours,    :label => "Worked Time (Hours)"
    f.input :worked_time_mins,     :label => "Worked Time (Minutes)"
    f.input :driving_time_hours,   :label => "Driving Time (Hours)"
    f.input :driving_time_mins,    :label => "Driving Time (Minutes)"
    f.input :spent_dollars,        :label => "Extra Money Spent"
  end
  f.actions
end

当我在编辑视图中使用此表单时,选择下拉菜单会自动默认为当前值。但是在生产中,由于某种原因,下拉菜单默认为顶部的空白值(为什么那个空白值仍然存在?)。

编辑

问题似乎是 ActiveAdmin 不理解关联,默认无法选择关联对象。我需要弄清楚如何为关联编码f.input。该表格用于时间表。一个 Timesheet has_many JobsAssignedWorkers,每个 JobsAssignedWorker 都有一个 Worker。

【问题讨论】:

在开发中,当没有现值时会发生什么?有没有可能在生产中你有一个没有标签的工人? 每个 Timesheet 都必须有一个与之关联的 Worker 问题似乎是ActiveAdmin不理解关联,默认无法选择关联对象。我需要弄清楚如何为关联编码f.input 【参考方案1】:

如果要包含空白值:

f.input :jobs_assigned_worker,
  label: 'Worker',
  as: :select,
  collection: ->  Worker.pluck(:name) ,
  include_blank: true

如果您不想包含空白值:

f.input :jobs_assigned_worker,
  label: 'Worker',
  as: :select,
  collection: ->  Worker.pluck(:name) ,
  include_blank: false

如果您想拥有空白值,但又不想将其作为选项:

f.input :jobs_assigned_worker,
  label: 'Worker',
  as: :select,
  collection: ->  Worker.pluck(:name) ,
  include_blank: true,
  allow_blank: false

【讨论】:

【参考方案2】:

尝试设置“include_blank”选项。

form do |f|
    f.inputs "Timesheet Details" do
        f.input :jobs_assigned_worker, :label => "Worker", as: :select, collection: Worker.all, include_blank: false
        f.input :worked_time_hours,    :label => "Worked Time (Hours)"
        f.input :worked_time_mins,     :label => "Worked Time (Minutes)"
        f.input :driving_time_hours,   :label => "Driving Time (Hours)"
        f.input :driving_time_mins,    :label => "Driving Time (Minutes)"
        f.input :spent_dollars,        :label => "Extra Money Spent"
    end
    f.actions
end

【讨论】:

以上是关于ActiveAdmin :select 下拉菜单在开发中默认为当前值,但在生产中默认为空白的主要内容,如果未能解决你的问题,请参考以下文章

Active Admin - 根据第一个下拉菜单刷新第二个下拉菜单,Ruby on Rails

select下拉菜单怎么变长?

ruby ActiveAdmin自定义菜单链接

Select2 下拉菜单低于主下拉菜单

关于html select下拉菜单

html select 属性 下拉菜单宽度设定