【发布时间】:2016-05-25 16:16:34
【问题描述】:
我有一个带有 AngularJS 前端应用的应用,它向我的 Rails 后端应用发送 JSON 请求。我正在使用 Paperclip 和 Devise,User 模型的规格已更改,以便允许上传图像。
由于我已经有一个 image 属性,为了存储 Omniauth 登录返回的 url,我为我的 User 模型创建了一个新属性,使用以下命令:
rails g paperclip user stored_image
并运行后续迁移。
我的user.rb
class User < ActiveRecord::Base
devise :database_authenticatable, :registerable, #:confirmable,
:recoverable, :rememberable, :trackable, :validatable,
:omniauthable, :omniauth_providers => [:facebook]
has_attached_file :stored_image, styles: { medium: "300x300>", thumb: "100x100>" }, default_url: "/images/noimg.png"
validates_attachment_content_type :stored_image, content_type: /\Aimage\/.*\Z/
end
我用来覆盖一些设计限制的注册控制器如下
class RegistrationsController < Devise::RegistrationsController
protected
def update_resource(resource, params)
# debugger
resource.update_without_password(params)
end
end
我的application_controller.rb
class ApplicationController < ActionController::Base
respond_to :html, :json
before_filter :configure_permitted_parameters, if: :devise_controller?
after_filter :set_csrf_cookie_for_ng
protect_from_forgery #with: :null_session
before_action :set_locale
def set_locale
I18n.locale = params[:locale] || I18n.default_locale
end
def handle_unverified_request
forgery_protection_strategy.new(self).handle_unverified_request
end
def set_csrf_cookie_for_ng
cookies['XSRF-TOKEN'] = form_authenticity_token if protect_against_forgery?
end
protected
def verified_request?
super || valid_authenticity_token?(session, request.headers['X-XSRF-TOKEN'])
end
def configure_permitted_parameters
devise_parameter_sanitizer.for(:sign_up) {|u| u.permit(:current_password ,:first_name, :last_name, :email, :password, :password_confirmation, :sex, :phone_number, :location, :birthday, :stored_image)}
devise_parameter_sanitizer.for(:account_update) { |u| u.permit(:first_name, :last_name, :email, :sex, :phone_number, :location, :birthday, :stored_image ) }
end
end
需要澄清的是,用户只在更新操作中上传他的图片。因此,当我在update_resource 操作中调试并检查params 时,我发现stored_image 不存在,因此无法存储图像。我的application_controller.rb 是否正确,可以让设备接受图片上传?
【问题讨论】:
-
那么这里有什么问题?
-
发生了一些奇怪的事情,在完成之前提交了问题并且没有意识到
-
您是否允许
stored_image在您的强参数中? -
啊,我忘了把我的
application_controller.rb放在问题中,你在哪里配置了强大的参数,对吗?
标签: ruby-on-rails devise paperclip