【问题标题】:Formtastic pre-check few checkboxesFormtastic 预检查几个复选框
【发布时间】:2015-09-13 10:08:27
【问题描述】:

我正在尝试手动告诉 formtastic 选中几个复选框。 @some_array 当前有一个名为 checked 的元素,每个成员都存在。

= f.input :cboxes, label: "CBoxes", as: :check_boxes, 
    collection: @some_array.map { |a| [a[:name], a[:id]] }

我尝试将 input_html 设置为 { checked: 'checked' } (How to pre-check checkboxes in formtastic) 但这会检查所有复选框,而不仅仅是我想要的几个复选框。

@some_array 的内容是通过 API 来的,我无法更改数据库结构 (Ruby on Rails + Formtastic: Not checking checkboxes for multiple checked answers)

建议?

【问题讨论】:

    标签: ruby-on-rails checkbox formtastic


    【解决方案1】:

    如果您正在编辑 ActiveModel,则无需“手动选择复选框”。

    让我们考虑一个简单的示例,其中包含单个 User 模型,其中包含字段 usernameroles。 Roles 字段是一个字符串列,Rails 将其序列化为一个数组。它也可能是 has_many 与其他 ActiveModel 的关系,但为了简单起见,我们假设它是一个数组。

    User 定义在user.rb:

    class User < ActiveRecord::Base
      serialize :roles, Array
    end
    

    现在您可以在控制器中“手动分配”所需角色给User

    @user = User.new(username: 'dimakura', roles: ['admin', 'editor'])
    

    并在您的视图中定义表单:

    <%= semantic_form_for @user do |f| %>
      <%= f.input :username %>
      <%= f.input :roles, as: :check_boxes, collection: ['owner', 'admin', 'editor', 'viewer'] %>
    <% end %>
    

    在给定的示例中,只会在表单中预先选择“管理员”和“编辑”角色。不会选择“所有者”和“查看者”角色。

    更新 Official documentation 声明:

    Formtastic,很像 Rails,非常以 ActiveRecord 为中心。

    但实际上,自己创建兼容 ActiveRecord 的模型并不是什么大挑战。可以在blog post 中找到这样做的示例。

    【讨论】:

    • 这行得通,是的。但我没有使用 ActiveModel。数组结构为:[{name: "some name", id: 123, checked: "checked"}]
    • @AshishKumar 您将此字段分配给的模型是什么?
    • 没有模型类。我通过外部 API 获取数据。由于无法控制服务端数据的变化,所以无法保存到数据库中。
    • @AshishKumar 好吧,要走的路是自己实现ActiveRecord 兼容类。查看更新答案中的示例链接
    猜你喜欢
    • 1970-01-01
    • 2013-01-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-08
    • 2012-10-17
    相关资源
    最近更新 更多