【问题标题】:"Unpermitted Parameters" using nested attributes and a has_one :through relationship使用嵌套属性和 has_one :through 关系的“不允许的参数”
【发布时间】:2014-05-16 18:34:45
【问题描述】:

我正在使用 Papercrop gem 来裁剪我的缩略图。它在我的用户控制器上的其他地方工作得很好,但是我试图用 has_one :through 关系进行裁剪,并且嵌套表单没有发挥作用。

一些示例参数:

Parameters: {"utf8"=>"✓", "authenticity_token"=>"t3BsHf6nxAhM9zcRUJfy3nMoLVQAJF/KLbWwqrxeYuk=", "project"=>{"uploaded_image_original_w"=>"960.0", "uploaded_image_original_h"=>"640.0", "uploaded_image_box_w"=>"500", "uploaded_image_crop_x"=>"330", "uploaded_image_crop_y"=>"0", "uploaded_image_crop_w"=>"607", "uploaded_image_crop_h"=>"607", "uploaded_image_aspect"=>"1.0"}, "commit"=>"Save", "profile_name"=>"Benji", "id"=>"1"}

以及随之而来的错误:

Unpermitted parameters: uploaded_image_original_w, uploaded_image_original_h, uploaded_image_box_w, uploaded_image_crop_x, uploaded_image_crop_y, uploaded_image_crop_w, uploaded_image_crop_h, uploaded_image_aspect

项目.rb

class Project < ActiveRecord::Base
    belongs_to :user

    has_one :thumbnail, :dependent => :destroy
    has_one :image, through: :thumbnail
    accepts_nested_attributes_for :image
end

projects_controller.rb(image_attribute attr_accessors 由 Papercrop gem 完成)

def crop_params
    params.require(:project).permit(image_attributes: [:uploaded_image_original_w, :uploaded_image_original_h, 
                                                     :uploaded_image_box_w, :uploaded_image_crop_x,
                                                     :uploaded_image_crop_y, :uploaded_image_crop_w, 
                                                     :uploaded_image_crop_h, :uploaded_image_aspect])
end

为什么不允许这些属性?

编辑:

添加 fields_for around 改变了我的错误,现在唯一不允许的参数是“image”

<%= form_for(@project.thumbnail.image, :as => :project,:url => project_thumbnail_path(@user, @project)) do |f| %>
    <%= f.fields_for :image, @project.thumbnail.image do |pf| %>
        <%= pf.cropbox :uploaded_image, :width => 500 %>
    <%= pf.crop_preview :uploaded_image, :width => 150 %>
    <%= pf.submit 'Save' %>
    <% end %>
<% end %>

【问题讨论】:

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


    【解决方案1】:

    查看您的参数,您没有将 image_attributes: 作为参数传递:

    "project"=>{"uploaded_image_original_w"=>"960.0", "uploaded_image_original_h"=>"640.0", "uploaded_image_box_w"=>"500", "uploaded_image_crop_x"=>"330", "uploaded_image_crop_y"=>"0", "uploaded_image_crop_w"=>"607", "uploaded_image_crop_h"=>"607", "uploaded_image_aspect"=>"1.0"}
    

    您可能没有在视图中设置f.fields_for(而只是按原样使用元素)。你有你的表单代码吗?


    要使上述参数正常工作,您需要这些 strong_params:

    params.require(:project).permit(:uploaded_image_original_w, :uploaded_image_original_h, 
                                                         :uploaded_image_box_w, :uploaded_image_crop_x,
                                                         :uploaded_image_crop_y, :uploaded_image_crop_w, 
                                                         :uploaded_image_crop_h, :uploaded_image_aspect)
    

    【讨论】:

    • 您好,谢谢您的帮助。这是我的表单 - &lt;%= form_for(@project.thumbnail.image, :as =&gt; :project,:url =&gt; project_thumbnail_path(@user, @project)) do |f| %&gt; &lt;%= f.cropbox :uploaded_image, :width =&gt; 500 %&gt; &lt;%= f.crop_preview :uploaded_image, :width =&gt; 150 %&gt; &lt;%= f.submit 'Save' %&gt; &lt;% end %&gt; 我认为需要将 strong_params 保留在其中,因为 attr_accessors 在图像模型中。
    • 我还尝试将字段包装在 fields_for 标记中给我一个未定义的 nil:NilClass 错误方法,因为我认为它不再引用附件。
    • 是的,f.fields_for 要求您在尝试使用之前构建嵌套对象。尝试将 @project.thumbnail.image.build 放入您的 new 方法中——我会在修复一些东西后一分钟内更好地查看
    • 已经建立了一个缩略图,这是更新方法的一部分&感谢你有机会,我一直在兜圈子!
    • 我已经尝试过了,但是我得到了未经许可的参数“图像”:&lt;%= form_for(@project.thumbnail.image, :as =&gt; :project,:url =&gt; project_thumbnail_path(@user, @project)) do |f| %&gt; &lt;%= f.fields_for :image, @project.thumbnail.image do |pf| %&gt; &lt;%= pf.cropbox :uploaded_image, :width =&gt; 500 %&gt; &lt;%= pf.crop_preview :uploaded_image, :width =&gt; 150 %&gt; &lt;%= pf.submit 'Save' %&gt; &lt;% end %&gt; &lt;% end %&gt;
    猜你喜欢
    • 1970-01-01
    • 2016-02-06
    • 2013-04-01
    • 1970-01-01
    • 2017-06-03
    • 1970-01-01
    • 1970-01-01
    • 2012-05-09
    • 1970-01-01
    相关资源
    最近更新 更多