模型缺少’image_file_name’所需的attr_accessor – Ruby on Rails 4

当我发布一个新的聚会时,我收到以下错误消息: 派对模型缺少’image_file_name’所需的attr_accessor ,它指向我的parties_controller.rb中的代码:

def create @party = Party.new(party_params) 

我很难理解这个错误的原因,

这是我正在使用的其他代码

party.rb

 class Party  { :medium => "300x300>", :thumb => "100x100>" } validates :description, presence: true validates :image, presence: true end 

parties_controller.rb

 class PartiesController < ApplicationController before_action :set_party, only: [:show, :edit, :update, :destroy] # GET /parties # GET /parties.json def index @parties = Party.all end # GET /parties/1 # GET /parties/1.json def show end # GET /parties/new def new @party = Party.new end # GET /parties/1/edit def edit end # POST /parties # POST /parties.json def create @party = Party.new(party_params) respond_to do |format| if @party.save format.html { redirect_to @party, notice: 'Party was successfully created.' } format.json { render :show, status: :created, location: @party } else format.html { render :new } format.json { render json: @party.errors, status: :unprocessable_entity } end end end # PATCH/PUT /parties/1 # PATCH/PUT /parties/1.json def update respond_to do |format| if @party.update(party_params) format.html { redirect_to @party, notice: 'Party was successfully updated.' } format.json { render :show, status: :ok, location: @party } else format.html { render :edit } format.json { render json: @party.errors, status: :unprocessable_entity } end end end # DELETE /parties/1 # DELETE /parties/1.json def destroy @party.destroy respond_to do |format| format.html { redirect_to parties_url, notice: 'Party was successfully destroyed.' } format.json { head :no_content } end end private # Use callbacks to share common setup or constraints between actions. def set_party @party = Party.find(params[:id]) end # Never trust parameters from the scary internet, only allow the white list through. def party_params params.require(:party).permit(:latitude, :longitude, :address, :description, :title, :image) end end 

user.rb

 class User < ActiveRecord::Base # Include default devise modules. Others available are: # :confirmable, :lockable, :timeoutable and :omniauthable devise :database_authenticatable, :registerable, #:confirmable, :recoverable, :rememberable, :trackable, :validatable has_many :parties validates :name, presence: true #validates :email, format: { with: /\A([^@\s]+)@((?:[-a-z0-9]+\.)+edu)\z/ } end 

发生此错误的原因是在db / migrations文件中创建了重复的迁移文件。 您需要做的是删除所有这些文件,然后在终端上执行rake db:rollback以取消所有迁移。 然后做一个rails d paperclip MODEL(用你的模型替换名字)图像。 然后做一个rails g paperclip MODEL图像然后rake db:migrate。 它现在应该工作

首先,您的image_file_name不应该是attr_accessor – 它应该是您的party对象的实际属性( @party.image_file_name

考虑到您已经执行了使用Paperclip设置db所需的migrations ,我相信问题很可能出在以下问题:

 validates :image, presence: true 

我相信你会更好地使用内置的Paperclip AttachmentPresenceValidator如下所示:

  class Party < ActiveRecord::Base has_attached_file :image, :styles => { :medium => "300x300>", :thumb => "100x100>" } validates_attachment_presence :image end 

这样做的原因是,当您将image对象传递给Party模型时,您不会发送“裸”对象。 Paperclip在传递之前会为对象分配各种属性,这就是为什么你会看到attr_accessor错误(Paperclip在保存之前分配属性,因此它必须使用attr_accessor来创建它们)

使用内置的validates_attachment方法将使您能够直接validationPaperclip对象