2014-04-04 134 views
2

我正在使用Papercrop gem裁剪縮略圖圖像。它可以在我的用戶控制器上的其他地方正常工作,但是我試圖用has_one:through關係進行裁剪,並且嵌套窗體不會彈球。使用嵌套屬性和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"} 

而且隨之而來的錯誤:

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被做

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 

Project.rb The 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周圍改變了我的錯誤,現在唯一不允許的參數是 「圖像」

<%= 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 %> 

回答

1

看你的參數,可以你不及格image_attributes:作爲PARAM:

"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(並且只是按照原樣使用元素)。你有你的表單代碼嗎?


若要獲得上述PARAMS工作,你需要這些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) 
+0

嘿,感謝您的幫助。這裏是我的表單 - <%= form_for(@ project.thumbnail.image,as =>:project,:url => project_thumbnail_path(@user,@project))do | f | %> <%= f.cropbox:uploaded_image,:width => 500%> <%= f.crop_preview:uploaded_image,:width => 150%> <%= f.submit'Save'%> <% end %> '我認爲需要保持內部的strong_params,因爲attr_accessors在圖像模型中。 – BeamJinn

+0

另外我試圖在fields_for標籤中包裝字段給了我一個未定義的nil:NilClass錯誤方法,因爲它不再引用附件了。 – BeamJinn

+0

是的,'f.fields_for'需要您在嘗試使用之前構建嵌套對象。嘗試將@ project.thumbnail.image.build放入你的'new'方法 - 修復一些東西后,我會在一分鐘後看到更好的效果 –