【问题标题】:Rails 5: How to send a post request for multiple recordsRails 5:如何发送多条记录的发布请求
【发布时间】:2017-05-01 14:02:00
【问题描述】:

这就是我想要做的:

= form_tag(path) do
    - @items.each do |i|
        = fields_for "i[]", i do
            %input.content{:name => "content", :type => "hidden"}
    = submit_tag "Submit"

如您所见,我尝试将所有 .content 输入的值从 items 传递到路径。

这些是我得到的参数:

{"utf8"=>"✓", "content"=>"", "commit"=>"Submit"}

我希望是这样的:

{"items": [
    {
        "id":1,
        "content":""
    },
    {
        "id":2,
        "content":""
    },
    {
        "id":3,
        "content":""
    },
] }

如何在 Rails 中创建这些 POST 请求?

【问题讨论】:

  • fields_for "i[]" fields_for 倾向于期望实际的 Active Record 类型(例如 fields_for @user - 不是作为字段名称的字符串。这是关于此的 api dock(它有示例): apidock.com/rails/ActionView/Helpers/FormHelper/fields_for
  • 我尝试过类似= simple_form_for @items, :url => path do |f| %input.content{:name => "content", :type => "hidden"} = submit_tag "Submit" 的操作,但现在我收到@itemsundefined method to_key'` 错误
  • 简单点怎么样:- @items.each do |i|hidden_field_tag :value => "items[#{i.id}]", i.contentend
  • 嗯,它抱怨i.content 是一个语法错误。我没有找到传递第二个值的机会。
  • 这是一个愚蠢的解决方案:- @snippets.each do |s| = hidden_field_tag :value => s.id.to_s + "-dfgdfgbdxfgbfgnbcfgngfncfgnghnghng" ?

标签: ruby-on-rails json ruby post ruby-on-rails-5


【解决方案1】:

这比您尝试做的要简单。如果每个嵌套模型都有一组字段,您往往只需要fields_for。在这里你只有一个隐藏列,所以我会选择只使用一个隐藏字段,例如:

= form_tag(path) do |f|
    - @items.each do |i|
      = f.hidden_field "items[#{i.id}]", value: i.content
    = submit_tag "Submit"

注意:没有错误测试留给读者作为练习。

这将生成一组参数,将项目的 id 与内容映射,例如:"items"=>{"38383285"=>"", "304713261"=>"Some content here", "547539357"=>"Some other content here"}

你可以通过迭代来改变你喜欢的实际值。

您没有提供任何模型实际结构的示例 - 所以我猜测您将如何使用它……您需要(可能大量)修改下面的示例以满足您的实际需求。 一方面 - 鉴于它是一个隐藏字段 - 我不知道您要更新的其他模型(和列)是什么。因此,假设您有第二个模型,称为OtherItem,它也有一个内容字段并通过item_id 列映射到Item。在这种情况下,你会做这样的事情:

def my_action
  item_ids = params[:items].keys
  items = OtherItem.where(:item_id => item_ids)
  items.each do |item|
    item.update(content: params[:items][item.item_id])
  end
  # other stuff here

结束

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-10-28
    • 2011-06-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多