0

我正在構建一個照片庫應用程序,允許用戶將多張照片附加到他們的每個畫廊。我正在使用Paperclip來處理文件上傳。「參數丟失或值爲空:」回形針沒有選擇文件 - 導軌

下面的代碼工作正常,直到單擊沒有選擇文件的窗體上單擊[上傳]。據我瞭解,它在被移交給Photo模型以運行它的狀態,文件類型和文件大小驗證之前,在控制器中卡住了。

點擊[上傳]與沒有選擇的文件時接收到的錯誤是: 「參數丟失或爲空值:相片」 提取的源具有photo#photo_params線突出顯示。

畫廊模式:

class Gallery < ActiveRecord::Base 
    belongs_to :user 
    has_many :photos 
end 

照片模式:

class Photo < ActiveRecord::Base 
    belongs_to :user 
    belongs_to :gallery 

    has_attached_file :photo, 
    s3_permissions: :private 

    validates_attachment :photo, 
    presence: true, 
    content_type: { 
     content_type: [ 
     "image/jpeg", # JPEG/JPG 
     "image/png" # PNG 
     ] }, 
    size: { in: 0..5.megabytes } 
end 

控制器動作(組圖#創建):

def create 
    @photo = Photo.new(photo_params) 
    @photo.gallery_id = @gallery.id 
    @photo.user_id = current_user.id 

    if @photo.save 
     flash[:success] = "Photo successfully saved." 
     redirect_to gallery_path(@photo.gallery) 
    else 
     flash[:error] = "The photo upload failed! Make sure the file you're trying to upload is of a supported type (JPG, JPEG or PNG) and try again." 
     redirect_to gallery_path(@photo.gallery) 
    end 
    end 

強PARAMS(照片#photo_params):

def photo_params 
    params.require(:photo).permit(:photo) 
end 

上傳形式:

<%= form_for Photo.new, url: gallery_photos_path(@gallery) do |f| %> 
    <%= f.label :photo %> 
    <%= f.file_field :photo %> 

    <%= f.submit "Upload" %> 
    <% end %> 

我認識到,在形式使用Model.new可能不是最好的做法,但因爲形式加載爲局部的畫廊#秀認爲,這是唯一的辦法,我可以得到它。

我也在考慮讓名爲:photo的模型和實際的Paperclip附件也被命名爲:photo也可能導致問題。它是否正確?

有人知道這裏發生了什麼嗎?

回答

0

是的,我想你喜歡你提到你應該重新命名你的回形針附件,但我不知道它是否會導致任何問題,有代碼photo_params.require(:photo).permit(:photo)不能任何好處。

此外,如果您在創建時遇到其他情況,請嘗試首先重定向到root_path。我認爲你的路線可能是錯誤的,因爲你的@photo實例變量實際上是Photo.new。

希望它有助於!我不是一個鐵軌專家。乾杯。

0

看着這個錯誤,我認爲它正在驗證params中'photo'的存在。

正如你所添加的「存在:真正的」在validates_attachment:照片塊,你必須提供在PARAMS

OR

如果你要上傳的形式沒有文件,你應該刪除

「的存在:真」約束。

0

高清photo_params

params.require(:photo).permit(:photo) 

改變名稱可能是

高清photo_params屬性,它變得有模態混淆和attribut名

params.require(:照片) .permit(:photo_url)

end