Ruby on Rails - 在每个循环内将局部变量传递给局部变量(使用 Haml)

Ruby on Rails - passing locals to partial inside each loop (With Haml)

我有一个对象数组。我正在尝试遍历它并将结果输出到 table。我希望我的 table 列之一是渲染的部分(表单)。但无论我在哪一行提交,它总是向我发送最后一行输出的本地人。

这是 rails 的正常行为还是我做错了什么?

我的观点是:

%table.table.table-hover
%thead
  %tr
    %th User id
    %th User email
    %th Account name
    %th Intercom Conversation
%tbody
  - @users.each do |user|
    %tr
      %td= user.user_id
      %td= user.user_email
      %td= user.account_name
      %td
        - if user.intercom_conversation
          %h4= user.intercom_conversation
        = link_to('edit', '#', {class: 'edit'})
        .conversation_edit
          = render(partial: 'conversation_form', locals: {user_id: user.user_id, fault_id: @fault.fault_id})

我渲染的部分是:

= form_tag('update_conversation', method: 'get')
= hidden_field_tag(:fault_id, fault_id)
= hidden_field_tag(:user_id, user_id)
yes
= radio_button_tag(:conversation, 0)
no
= radio_button_tag(:conversation, 1)
ignored
= radio_button_tag(:conversation, 2)
= submit_tag('Change')

我想我应该说所有渲染(在浏览器中都是正确的并且没有引发错误)

提前致谢。

您正在输出一系列没有结束标记的空表单。您需要将块传递给 form_tag 并缩进内容以使其自动添加所需的 </form> 标签。

= form_tag('update_conversation', method: 'get') do

  = hidden_field_tag(:fault_id, fault_id)
  = hidden_field_tag(:user_id, user_id)
  yes
  = radio_button_tag(:conversation, 0)
  no
  = radio_button_tag(:conversation, 1)
  ignored
  = radio_button_tag(:conversation, 2)
  = submit_tag('Change')