【问题标题】:WARNING: Can't mass-assign protected attributes Paperclip Rails 4警告:无法批量分配受保护的属性 Paperclip Rails 4
【发布时间】:2015-03-01 12:23:48
【问题描述】:

我正在尝试使用回形针通过 heroku 将图像上传到亚马逊 S3。到目前为止,我得到:警告:无法为用户批量分配受保护的属性:图片。我浏览了许多指南,但没有任何帮助。

我的模特:

class User < ActiveRecord::Base
  resourcify
 attr_accessible :login, :password, :password_confirmation, :longitue, :latitude, :showingName,:email,:contato,:telefone
 has_many :api_keys
 has_secure_password

  has_attached_file :picture, 
                                styles: {
                                  thumb: '100x100>',
                                  square: '200x200>',
                                  medium: '300x300>',
                                  icon: '30x30>'}#,


  validates_attachment_content_type :picture, :content_type => /\Aimage\/.*\Z/
  validates_attachment_file_name :picture, :matches => [/png\Z/, /jpe?g\Z/]
  validates_with AttachmentSizeValidator, :attributes => :picture, :less_than => 3.megabytes

  rolify :before_add => :before_add_method

  def before_add_method(role)
        # do something before it gets added
 end

我的控制器:

class UsersController < ApplicationController
load_and_authorize_resource

  def new
  end

  def index
  end

  def create
    @user = User.new(user_params)
    respond_to do |format|
      if @user.save
        format.html { redirect_to @user, notice: 'Comida was successfully created.' }
        format.json { render :show, status: :created, location: @user }
      else
        format.html { render :new }
        format.json { render json: @user.errors, status: :unprocessable_entity }
      end
    end

  end

private
    # Use callbacks to share common setup or constraints between actions.
    def set_user
      @user = User.find(params[:id])
    end

    # Never trust parameters from the scary internet, only allow the white list through.
    def user_params
      params.require(:user).permit(:picture,:login, :password, :longitue, :latitude, :showingName,:email,:contato,:telefone)
    end


end

我的看法:

<%= simple_form_for @user, :html => { :class => 'form-horizontal', :multipart => true } do |f| %>


  <%= f.input :nome %>


<%= f.label :picture %>
  <%= f.file_field :picture %>

  <%= f.input :showingName %>
  <%= f.input :email %>
  <%= f.input :login %>

  <%= f.input :password %>
  <%= f.input :password_confirmation %>
  <%= f.input :contato %>
  <%= f.input :telefone %>
  <%= f.input :description %>
  <%= f.input :laitude %>
  <%= f.input :logitude %>
  <div class="form-actions">
    <%= f.button :submit, :class => 'btn-primary' %>
    <%= link_to t('.cancel', :default => t("helpers.links.cancel")),
                users_path, :class => 'btn btn-meubar' %>
  </div>
<% end %>

生产.rb

config.paperclip_defaults = {
  :storage => :s3,
  :s3_host_name => 's3-sa-east-1.amazonaws.com',
  :s3_credentials => {
    :access_key_id =>   ENV['AWS_ACCESS_KEY_ID'],
     :secret_access_key => ENV['AWS_SECRET_ACCESS_KEY'],
     :bucket => ENV['S3_BUCKET_NAME']      
   },
   :path => ":class/:id/:basename_:style.:extension",
    :url => ":s3_path_url"
}

感谢您的时间和帮助:)

【问题讨论】:

标签: ruby-on-rails ruby-on-rails-4 heroku paperclip paperclip-validation


【解决方案1】:

只需将:picture 添加到attr_accessible

【讨论】:

  • 我尝试这样做,但收到以下错误:"missing required :bucket option"
  • missing required :bucket option" 是下一个/单独的问题,可以通过运行heroku config:add S3_BUCKET_NAME = &lt;bucket name from S3&gt; 来解决; production.rb 中的配置正在寻找要设置的环境变量。您可以从 s3 配置中获取存储桶名称。
  • 根据回形针文档,我应该将 att_accessible 用于 :picture。
  • 非常适合我!
猜你喜欢
  • 1970-01-01
  • 2011-04-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-06-03
  • 1970-01-01
相关资源
最近更新 更多