为什么回形针上传会出现 Trying to link 错误?
Why is paperclip upload giving Trying to link error?
所以我有这些文件
deal.rb
class Deal < ApplicationRecord
has_many :images, as: :imageable, dependent: :destroy
#there is more code after this
end
image.rb
class Image < ApplicationRecord
belongs_to :imageable, polymorphic: true
belongs_to :deal
has_attached_file :attachment, styles: { thumb: "100x100!", medium: "200x200!" }
validates_attachment_content_type :attachment, content_type: /\Aimage\/.*\z/
end
deals_controller.rb
module Admins
class DealsController < BaseController
before_action :find_deal, only: [:edit, :update, :destroy]
def index
@deals = Deal.includes(:images)
end
def new
@deal = Deal.new
end
def edit
end
def create
@deal = Deal.new(deal_params.merge(created_by: current_user.id))
if @deal.save
flash[:success] = t('.success')
redirect_to admins_deals_url
else
flash.now[:warning] = t('.failure')
render :new
end
end
def update
if @deal.update(deal_params)
flash[:success] = t('.success')
redirect_to admins_deals_url
else
flash.now[:warning] = @deal.errors[:base].to_sentence
render :edit
end
end
def destroy
if @deal.destroy
flash[:success] = t('.success')
redirect_to admins_deals_url
else
flash.now[:warning] = t('.failure')
render :index
end
end
private
def deal_params
params.require(:deal).permit(:title, :description, :price, :discounted_price, :quantity, :publish_date, images_attributes: [:id, :attachment, :_destroy])
end
def find_deal
@deal = Deal.find_by(id: params[:id])
unless @deal
flash[:warning] = t('deals.not_found')
redirect_to admins_deals_path
end
end
end
end
application_controller.rb
class ApplicationController < ActionController::Base
helper_method :current_user, :current_cart
def current_user
@current_user ||= User.find_by(id: current_user_id)
end
def current_user_id
cookies.signed[:user_id] || session[:user_id]
end
def current_cart
@current_cart ||= (current_user.addressed_cart || current_user.cart) if current_user
end
end
编辑:
虽然我不认为 application_controller 与错误有任何关系
我正在创建一个包含嵌套图像属性的交易。我正在使用回形针上传图像。但是我收到了这些错误。我什至不知道这些错误是什么意思。这是显示错误的图像。
这是 pastebin link
errors on terminal on creating deal
这似乎是验证错误。试试这个来验证:
validates_attachment_content_type :attachment, :content_type => /image/
或者您可以查看其他变体 Validate Attachment Content Type Paperclip
测试代码后更新似乎这是一个验证错误,因为 Paperclip 创建了一个图像但不知道 belongs_to
关联。您可以将其设为可选,因为默认情况下 rails 5 需要 belongs_to
id 字段。
class Image < ApplicationRecord
belongs_to :imageable, polymorphic: true
belongs_to :deal, optional: true
has_attached_file :attachment, styles: { thumb: "100x100!", medium: "200x200!" }
validates_attachment_content_type :attachment, content_type: /\Aimage\/.*\z/
end
所以我有这些文件
deal.rb
class Deal < ApplicationRecord
has_many :images, as: :imageable, dependent: :destroy
#there is more code after this
end
image.rb
class Image < ApplicationRecord
belongs_to :imageable, polymorphic: true
belongs_to :deal
has_attached_file :attachment, styles: { thumb: "100x100!", medium: "200x200!" }
validates_attachment_content_type :attachment, content_type: /\Aimage\/.*\z/
end
deals_controller.rb
module Admins
class DealsController < BaseController
before_action :find_deal, only: [:edit, :update, :destroy]
def index
@deals = Deal.includes(:images)
end
def new
@deal = Deal.new
end
def edit
end
def create
@deal = Deal.new(deal_params.merge(created_by: current_user.id))
if @deal.save
flash[:success] = t('.success')
redirect_to admins_deals_url
else
flash.now[:warning] = t('.failure')
render :new
end
end
def update
if @deal.update(deal_params)
flash[:success] = t('.success')
redirect_to admins_deals_url
else
flash.now[:warning] = @deal.errors[:base].to_sentence
render :edit
end
end
def destroy
if @deal.destroy
flash[:success] = t('.success')
redirect_to admins_deals_url
else
flash.now[:warning] = t('.failure')
render :index
end
end
private
def deal_params
params.require(:deal).permit(:title, :description, :price, :discounted_price, :quantity, :publish_date, images_attributes: [:id, :attachment, :_destroy])
end
def find_deal
@deal = Deal.find_by(id: params[:id])
unless @deal
flash[:warning] = t('deals.not_found')
redirect_to admins_deals_path
end
end
end
end
application_controller.rb
class ApplicationController < ActionController::Base
helper_method :current_user, :current_cart
def current_user
@current_user ||= User.find_by(id: current_user_id)
end
def current_user_id
cookies.signed[:user_id] || session[:user_id]
end
def current_cart
@current_cart ||= (current_user.addressed_cart || current_user.cart) if current_user
end
end
编辑: 虽然我不认为 application_controller 与错误有任何关系
我正在创建一个包含嵌套图像属性的交易。我正在使用回形针上传图像。但是我收到了这些错误。我什至不知道这些错误是什么意思。这是显示错误的图像。
这是 pastebin link errors on terminal on creating deal
这似乎是验证错误。试试这个来验证:
validates_attachment_content_type :attachment, :content_type => /image/
或者您可以查看其他变体 Validate Attachment Content Type Paperclip
测试代码后更新似乎这是一个验证错误,因为 Paperclip 创建了一个图像但不知道 belongs_to
关联。您可以将其设为可选,因为默认情况下 rails 5 需要 belongs_to
id 字段。
class Image < ApplicationRecord
belongs_to :imageable, polymorphic: true
belongs_to :deal, optional: true
has_attached_file :attachment, styles: { thumb: "100x100!", medium: "200x200!" }
validates_attachment_content_type :attachment, content_type: /\Aimage\/.*\z/
end