【问题标题】:undefined method `stringify_keys' for [closed][关闭]的未定义方法`stringify_keys'
【发布时间】:2021-11-18 11:53:59
【问题描述】:
undefined method `stringify_keys' for "progress":String

进入check_box_tag 状态时出现此错误。怎么解决的?

<%= form_tag update_me_iteams_path, :method =>'put' do %>
  <table>
    <tr>
        <th>Title</th>
        <th>Text</th>
        <th>Status</th>
        <th></th>
    </tr>
  <% @iteams.each do |iteam| %>
    <tr>
      <td><%= iteam.id %></td>
      <td><%= iteam.title %></td>
      <td><%= iteam.text %></td>
      <td><%= iteam.status %></td>
      <td><%= link_to 'Show', iteam_path(iteam) %></td>
      <td>
          <%= check_box_tag "id[]", iteam.id, "status[]", iteam.status %>
      </td>
    </tr>
  <% end %>
  </table>
  <%= submit_tag "Edit Checked" %> 
<% end %>

我的定义

def update_me
  @iteam = Iteam.find(params[:id])

  if CHECK_STATUS_I_DONT_KNOWN == '0' 
    Iteam.where(params[:id]).update_attribute(status: 'DONE')
  else
    Iteam.where(params[:id]).update_attribute(status: 'progress')
  end

end

【问题讨论】:

    标签: ruby-on-rails ruby


    【解决方案1】:

    check_box_tag 签名是check_box_tag(name, value = "1", checked = false, options = {}) (https://apidock.com/rails/ActionView/Helpers/FormTagHelper/check_box_tag)。您将 item.status 作为导致错误的选项传递。

    不幸的是,我不清楚您要在此处创建哪个复选框 - 为什么您有"status[]",是另一个复选框吗?或者您是否试图通过一个复选框传递两个表单参数 - 这根本行不通。我希望有更多类似的东西:

    check_box_tag "id[]", item.id
    

    编辑:

    您不需要通过表单发送status,您的数据库中已经有了它。更新表单以进行上述更改和您的操作:

    def update_me
      @iteams = Iteam.where(id: params[:id])
    
      done_items = @iteams.where(status: 'DONE').pluck(:id)
      progress_items = @iteams.where(status: 'progress).pluck(:id)
      @iteams.where(id: done_items).update_all(status: 'progress')
      @iteams.where(id: progress_items).update_all(status: 'DONE')
    end
    

    【讨论】:

    • 我需要以某种方式传递两个参数。请帮忙,有其他选择吗?
    • 所以你想要物品的状态和ID?为什么?有id你可以找到状态,不是吗?更不用说它会更安全,因为状态可以及时更改,并且依赖表单加载时的状态可能是一种风险
    • 请查看我的问题描述。我已经更新了它。我想你会明白我想做什么,请帮忙
    • @Kais - 不幸的是,它根本不会让它更干净。 CHECK_STATUS_I_DONT_KNOWN 是一个常数,所以条件是固定的。 iteams 没有循环,编写的代码也会。首先,引发异常,因为这不是 where 的工作方式,其次,即使更正后也只会更新具有相同状态的所有记录。
    • 因此,我寻求帮助....我需要帮助才能做到这一点,我不能,因此我寻求帮助。
    猜你喜欢
    • 1970-01-01
    • 2013-02-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-20
    • 1970-01-01
    相关资源
    最近更新 更多