代码之家  ›  专栏  ›  技术社区  ›  Ganesh Shankar

为Rails中的复选框标记使用自定义id

  •  15
  • Ganesh Shankar  · 技术社区  · 16 年前

    - subject.syllabus_references.each do |sr|
          = check_box_tag 'question[syllabus_reference]', sr.id, :id => sr.id
          = label_tag sr.id, sr.name
    

    我想设置一个自定义id,以便复选框的标签可以正常工作,但我似乎不知道如何(:id=>sr.id不工作。

    问题还可能出在我定义标签的方式上,所以如果我可以让它引用正确的复选框而不设置自定义id,那么也可以。。。

    7 回复  |  直到 16 年前
        1
  •  22
  •   nanda    16 年前

    <% @cursos.each do |c| %>
      <span class='select_curso'>
        <%= check_box_tag "vaga[curso_ids][]",
          c.id, (checked = true if form.object.curso_ids.include?(c.id)) %>
        <%= label_tag "vaga[curso_ids][][#{c.id}]", c.nome %>
      </span>
    <% end %>
    

    所以在params中,我有一个数组 而不是字符串 . 如果要返回单个值,请使用 瓦加 瓦加语 返回数组。

        2
  •  21
  •   Will Tomlins    13 年前

    = check_box_tag 'question[syllabus_reference]', 1, nil, :id => sr.id
    
        3
  •  11
  •   Leonel Galán    15 年前

    @Ganesh,在您的解决方案中,生成的params哈希具有以下形式:

    params[:question][:syllabus_reference] = {1 => 1, 2 => 2, 3 => 3, ...}
    

    check_box_tag "question[syllabus_reference][]", sr.id, checked, {:id => "question_syllabus_reference_#{sr.id}"
    

    params[:question][:syllabus_reference] = {1, 2, 3, ...}
    
        4
  •  3
  •   Ganesh Shankar    16 年前

    我想我知道了。。。

    - subject.syllabus_references.each do |sr|
      = check_box_tag "question[syllabus_reference][#{sr.id}]", sr.id
      = label_tag "question[syllabus_reference][#{sr.id}]", sr.name
    

        5
  •  1
  •   Flexo - Save the data dump sunny moon    14 年前

    这很有帮助,结束了我一天的搜索。到目前为止,我发现的大部分内容都包含语法和额外的参数,rails要么标记这些参数,要么完全忽略这些参数。我所要做的就是将一个数组从我的视图传递到我的控制器,并使用复选框告诉控制器要处理哪些数组元素。我能够将上述内容进一步简化为:

    <%= check_box_tag "c[]", c.id %>
    

    c来自我的数据库:

    <%= @objects.each do |c| %>
    

    当然,这会将一个对象id数组传递给我的控制器,该数组只与选中的条目有关(由于我遗漏了 :错误 :正确 ),即 几乎

    现在我只需要传入一个对象类型指示符—即使只是一个文本字符串也可以很好地完成—这样控制器就可以知道它要处理的对象类型,而不必使用额外的列来扩充我的模型。我现在就开始,并张贴我的解决方案,但请让我知道,如果有一个快速和简单的方法来做到这一点,如果你已经知道。

        6
  •  1
  •   d1jhoni1b    8 年前

    假设你有一个 print 在某处用 framed 属性,则必须显示 prints 因此,在循环中,您将创建一个自定义 row 和 column 每个都有唯一的id checkbox 用于更新

    .input.row.collapse
      = check_box_tag :framed, print.framed, nil, { id: "framed_#{print.id}" }
    
        7
  •  0
  •   Dave Sieving    14 年前

    莱托,

    为了结束循环,我放弃了传递对象类型指示符的尝试 复选框标记 . 我在上一篇文章(见下文)中添加到语法中的每个参数都会导致checkbox状态默认为 而不是 ,而不向控制器传递任何附加数据。

    在对替代解决方案保持警惕的同时,我暂时将对象类型合并到 提交标签 价值观。因为 提交标签 值是在submit按钮上显示给用户的内容,但是可以说这会强制视图清晰化,即使它为控制器提供了所需的消歧功能。