1

根据这个线程,我试图让我的代码显示在您显示编辑视图时已经检查了哪些项目。所有其他字段均已预先填充。

这是我目前的方式:

%fieldset.border.border-dark.p-2.mb-4
        %legend Pronouns
        .row.mb-4
            = f.collection_check_boxes :pronouns, pronoun_list, :itself, :itself, {include_hidden: false} do |b|
                .col-md-4.d-grid.d-block.mb-2
                    = b.check_box(class: "btn-check", checked: @member.pronouns.split(",").map(&:itself))
                    = b.label(:"data-value" => b.value, class: "btn btn-outline-dark text-start btn-lg") 

        .form-group.mb-4
            = f.label :pronouns_other, "Other Pronouns"
            = f.text_field :pronouns_other, class: "form-control border border-dark"
            

我需要调用 include_hidden: false 否则数组包含一个空白项作为数组中的第一个。

这是它所指的辅助方法:

def pronoun_list
        [
            "He/Him/His",
            "She/Her/Hers",
            "They/Them/Their",
            "Zie/Zim/Zir",
            "Sie/Sie/Hir",
            "Ey/Em/Eir",
            "Ve/Ver/Vis",
            "Tey/Ter/Tem",
            "E/Em/Eir",
            "Prefer not to disclose"            
        ]
    end

与其他线程不同的是,我使用辅助方法来调用项目集合,而其他线程正在调用数据库中的对象集合。所以我不确定我应该如何首先获得身份证。

@member.pronouns 是一个包含数组的字符串(我正在使用 PostgresQL),所以首先我需要将它转换为我假设的数组,因为我在其他地方阅读,然后我可以调用它的 map。但是虽然 .map(&:itself) 没有返回任何错误,但在呈现编辑视图时不会检查代词字符串中列出的项目。

有任何想法吗?

4

1 回答 1

0

经过几个小时的代码争论,并四处寻找其他示例,我终于让 Rails 正常工作。

%fieldset.border.border-dark.p-2.mb-4
        %legend Pronouns
        .row.mb-4
            - pronoun_list.each do |pronoun|
                .col-md-4.d-grid.d-block.mb-2
                    = f.check_box :pronouns, { multiple: true, checked: @member.pronouns.include?(pronoun), class: "btn-check" }, pronoun, false
                    = f.label :pronouns, pronoun, value: pronoun, class: "btn btn-outline-dark btn-lg text-start"
        
        

解释:

我还没有让它与 collection_check_boxes 一起工作;但是我确实让它使用 each 方法,然后在每个复选框上使用 multiple: true 。

我还将checked_value 设置为代词并将unchecked_value 字段设置为false。如果我没有将其设置为 false 并且选择了多个,我会在数组中得到一堆零。设置错误,我只得到我在数组中选择的那些。

于 2022-01-23T08:51:01.407 回答