【问题标题】:Rails 4: passing parent's id for nested attributes when UpdatingRails 4:在更新时传递嵌套属性的父 ID
【发布时间】:2015-03-21 19:10:27
【问题描述】:

所以,我正在尝试更新嵌套对象,但由于某种原因,父控制器的 apps_params 没有得到满足,因为 app 没有传递给它。看看下面,如果我应该发布更多代码,请告诉我。

控制台报错如下:

Started PUT "/apps/1" for 127.0.0.1 at 2015-03-21 14:00:12 -0500
Processing by AppsController#update as JSON
  Parameters: {"authenticity_token"=>"0Z/SxhhEO6OA6eiShd+1PZI0DQ9QK1I7G8wqoInz+vM=", "@app"=>{"element"=>{"@app"=>{"el
ent.name"=>"hgfd"}}}, "id"=>"1"}
  App Load (1.0ms)  SELECT  "apps".* FROM "apps"  WHERE "apps"."id" = ? LIMIT 1  [["id", 1]]
Completed 400 Bad Request in 2ms

ActionController::ParameterMissing (param is missing or the value is empty: app):
  app/controllers/apps_controller.rb:73:in `app_params'
  app/controllers/apps_controller.rb:45:in `block in update'
  app/controllers/apps_controller.rb:44:in `update'

apps_controller.rb中的引用行:

  def update
    respond_to do |format|
      if @app.update(app_params)
        format.html { redirect_to @app, notice: 'App was successfully updated.' }
        format.json { render :show, status: :ok, location: @app }
      else
        format.html { render :edit }
        format.json { render json: @app.errors, status: :unprocessable_entity }
      end
    end
  end

private
def app_params
  params.require(:app).permit(:name, :infivewords, :description, elements_attributes: [:name, :description])
end

我的Apps 显示View

<% @app.elements.each do |element| %>
  <tr>
        <td>    
              <span class="rest-in-place" data-url="<%= url_for @app %>" data-object="@app[element]" data-attribute="@app[element.name]" data-placeholder="Enter description">
                <%= element.name %>
        </td>
        <td><h2><%= element.description %></h2></td>

我尝试无休止地弄乱View,试图弄清楚为什么app_id 没有通过,但我不知所措,似乎找不到我想要的信息到处找。

感谢任何帮助。谢谢。

编辑:我应该在我的路线中补充一点,我有两个单独的资源块。一种元素位于应用程序内部,另一种特征位于元素内部。回到办公桌后,我会发布代码。

EDIT2 - 应用表单视图:

<%= form_for(@app) do |f| %>
  <% if @app.errors.any? %>
    <div id="error_explanation">
      <h2><%= pluralize(@app.errors.count, "error") %> prohibited this app from being saved:</h2>

      <ul>
      <% @app.errors.full_messages.each do |message| %>
        <li><%= message %></li>
      <% end %>
      </ul>
    </div>
  <% end %>

  <div class="field">
    <%= f.label :name %><br>
    <%= f.text_field :name %>
  </div>
  <div class="field">
    <%= f.label :infivewords %><br>
    <%= f.text_field :infivewords %>
  </div>
  <div class="field">
    <%= f.label :description %><br>
    <%= f.text_area :description %>
  </div>
  <div class="actions">
    <%= f.submit %>
  </div>
<% end %>

【问题讨论】:

  • 您可以添加您的应用程序表单吗?参数“@app”看起来很可疑,也许应该是“app”?
  • @messanjah 会在几分钟后回到我的办公桌前,伙计。感谢您的快速回复。您指的是哪个“@app”?在视图的 do 块内?我几乎尝试了所有阻止并得到相同错误,或者没有更新也没有错误的东西,但我会再试一次并发布控制台和浏览器的响应。
  • 参数哈希中的“@app”键。 app_params 需要“:app”,但看起来正在发送“@app”。
  • @messanjah 我在“EDIT2”中发布了应用程序表单视图。你确实是对的。我将显示视图中do 块中的@app 更改为仅app,并在permitted parameters 中为apps_params 添加了elementapps_controller 中,并得到一个不同的控制台错误:Unpermitted parameters: element即使我在params 中将element 列入白名单。
  • @messanjah,我现在引用patshaughnessy.net/2014/6/16/…,但我并没有将这些部分放在一起,说明我需要如何实现这一点。 Ctrl+F 表示“它仍然不起作用。你会收到相同的警告:”你会看到它正在谈论刚刚发生在我身上的事情,rails 没有将新的 param 列入白名单

标签: ruby-on-rails ruby-on-rails-4 nested-attributes


【解决方案1】:

我不熟悉rest_in_place,但我会在这一行仔细检查您的数据属性

<span class="rest-in-place" data-url="<%= url_for @app %>" data-object="@app[element]" data-attribute="@app[element.name]" data-placeholder="Enter description">

也许更像

<span class="rest-in-place" data-url="<%= url_for @app %>" data-object="app[elements]" data-attribute="name" data-placeholder="Enter description">

【讨论】:

  • 我同意,我刚刚更新了我的显示视图以反映您的建议。但是,控制台向我抛出以下错误:ActiveRecord::UnknownAttributeError (unknown attribute: element): app/controllers/apps_controller.rb:45:in block in update' app/controllers/apps_controller.rb:44:in update'
  • 可能是复数形式app[elements]?
  • 不幸的是,我也尝试过,它返回以下错误:ActiveRecord::AssociationTypeMismatch (Element(#39712560) expected, got Array(#3437496)): app/controllers/apps_controller.rb:45:in block in update' app/controllers/apps_controller.rb:44:in update'
猜你喜欢
  • 2023-03-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-11-03
  • 1970-01-01
相关资源
最近更新 更多