如何在Active Admin的编辑页面中仅显示值

32

我在Active Admin中有一个编辑表单,我需要将某些字段设置为只读。

我的当前编辑页面如下所示:

enter image description here

我需要让页面看起来像这样:

enter image description here

如何实现呢?我的编辑表单页面代码如下:

    form :html => { :enctype => "multipart/form-data" } do |f|  
      f.inputs "Users" do
        f.input :device, :label => 'Device', :as => :select, :collection => DEVICE, :include_blank => false
        f.input :current_address, :label => 'Current Address', :as => :string
      end
    end

请帮忙。


实际上我做的是我添加了 disabled => true,我看到了禁用的文本框。我将文本框的背景样式化以匹配页面颜色。所以它看起来像我需要的。但那不是正确的方式 :( - Amal Kumar S
很遗憾,这本来是一个不错的选择。 - Fivell
6个回答

53

如Alex所说,将其设置为disabled。如果您可以接受这个语义,那么您可以使用CSS来获得您想要的视觉效果。

对我来说,语法稍有不同才能使其起作用。

在您的管理表单中:

 f.input :finish_position, input_html: { disabled: true } 

在你的CSS中的active_admin.css文件

input[disabled="disabled"],
input[disabled] {
  background-color: #F4F4F4;
  border: 0px solid #F4F4F4 !important;  
}

1
非常感谢 @Will,我对 CSS 进行了一些小修改,以强调“禁用字段”的概念:我用 cursor: not-allowed; 替换了 border: 0px solid #F4F4F4 !important; - microspino

14

为了在ActiveAdmin.register {}块中更清晰地定义表单,您可能希望使用formtastic定义“只读”输入类型来在active admin中使用:

表单块语法适用于activeadmin版本1.0.0.pre在0becbef0918a上。

# app/admin/inputs/readonly_input.rb

class ReadonlyInput < Formtastic::Inputs::StringInput
  def to_html
    input_wrapping do
      label_html <<
      template.content_tag('div', @object.send(method))
    end
  end
end

# app/admin/your_model.rb

ActiveAdmin.register YourModel do
  # ...

  form do |f|
    # ...

    input :current_address, as: :readonly

    # ...
  end  
end

当表单提交时,这会将值发送到控制器吗? - harshitpthk
不会的,不确定为什么需要这样做,因为理论上它正在显示字段的已保存值。 - Whatcould

10

我也遇到了同样的问题,尝试使用 :disabled,但是它没有解决我的问题,因为在将其发送到服务器时,我想要params 对象包含field的值。当你将一个form input标记为:input_html => {:disabled => true}时, 它不会将这个字段的值包括在params中。

所以,我使用了:input_html => {:readonly => true},这解决了我的两个问题:

  1. 不允许用户进行编辑。
  2. 将值包含在params中。

希望这可以帮助到你。


1
:input_html => {:disabled => true},它不会将此字段值包含在params中。 - Albert.Qing

4
这个怎么样?
form :html => { :enctype => "multipart/form-data" } do |f|  
  f.inputs "Users" do
    f.input :device, :label => 'Device', :as => :select, :collection => DEVICE, :include_blank => false
    f.li do
      f.label :current_address
      f.span f.object.current_address
    end
  end
end

2
尝试为地址输入字段添加, :disabled => true

当我添加 :disabled => true 时,我可以看到文本框,但它不可编辑。实际上,我不想要任何文本框。 - Amal Kumar S

0

诀窍是使用“对象”。以下是您应该编写的代码:

form :html => { :enctype => "multipart/form-data" } do |f|  
  f.inputs "Users" do
    f.input :device, :label => 'Device', :as => :select, :collection => DEVICE, :include_blank => false
    f.label :current_address, f.object.current_address
  end
end

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接