Rails - 重新归档 Gem - 未定义的方法 `file_id_will_change!'
Rails - Refile Gem - undefined method `file_id_will_change!'
我有一个 属性 模型,里面有很多照片。我正在尝试使用 refile gem 上传图片。
class Property < ActiveRecord::Base
has_many :photos, :dependent => :destroy
accepts_attachments_for :photos, attachment: :file
end
class Photo < ActiveRecord::Base
belongs_to :property
attachment :file
end
这里是schema.rb
的照片部分
create_table "photos", force: :cascade do |t|
t.integer "property_id"
t.string "file"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
end
这里是创建新 属性 表单(苗条)
的相关部分
.form
= form_for @property do |property|
.file_upload
= property.attachment_field :photos_files, multiple: true
= property.label :photos_files
= property.submit
这是属性控制器
class PropertiesController < ApplicationController
def new
@property = Property.new
end
def create
@property = Property.new(property_params)
if @property.save!
redirect_to @property
else
render 'new'
end
end
private
def property_params
params.require(:property).permit(:attributes.... photos_files: [])
end
end
提交表单后出现以下错误。
NoMethodError (undefined method `file_id_will_change!' for #<Photo:0x007f96e8532560>):
绞尽脑汁想了半天也看不出哪里错了
所以在查看包含的示例应用程序中的迁移文件后,我发现需要更多模型属性。来自 Carrierwave,我的印象是 Refile 类似,只是在字符串列中写入数据库的文件路径。
在此架构摘录中,您可以看到 Refile 以不同方式存储数据。
create_table "documents", force: :cascade do |t|
t.integer "post_id", null: false
t.string "file_id", null: false
t.string "file_filename", null: false
t.string "file_size", null: false
t.string "file_content_type", null: false
end
添加新属性后,上传器运行良好。
我有一个 属性 模型,里面有很多照片。我正在尝试使用 refile gem 上传图片。
class Property < ActiveRecord::Base
has_many :photos, :dependent => :destroy
accepts_attachments_for :photos, attachment: :file
end
class Photo < ActiveRecord::Base
belongs_to :property
attachment :file
end
这里是schema.rb
的照片部分 create_table "photos", force: :cascade do |t|
t.integer "property_id"
t.string "file"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
end
这里是创建新 属性 表单(苗条)
的相关部分.form
= form_for @property do |property|
.file_upload
= property.attachment_field :photos_files, multiple: true
= property.label :photos_files
= property.submit
这是属性控制器
class PropertiesController < ApplicationController
def new
@property = Property.new
end
def create
@property = Property.new(property_params)
if @property.save!
redirect_to @property
else
render 'new'
end
end
private
def property_params
params.require(:property).permit(:attributes.... photos_files: [])
end
end
提交表单后出现以下错误。
NoMethodError (undefined method `file_id_will_change!' for #<Photo:0x007f96e8532560>):
绞尽脑汁想了半天也看不出哪里错了
所以在查看包含的示例应用程序中的迁移文件后,我发现需要更多模型属性。来自 Carrierwave,我的印象是 Refile 类似,只是在字符串列中写入数据库的文件路径。
在此架构摘录中,您可以看到 Refile 以不同方式存储数据。
create_table "documents", force: :cascade do |t|
t.integer "post_id", null: false
t.string "file_id", null: false
t.string "file_filename", null: false
t.string "file_size", null: false
t.string "file_content_type", null: false
end
添加新属性后,上传器运行良好。