在 Ckeditor::Picture 和 Ruby 中的模型之间创建关联的正确方法 Rails?
The proper way of creating association between Ckeditor::Picture and a model in Ruby on Rails?
我安装了 Article 模型和 Ckeditor + Paperclip。当我将图片上传到文章正文时,一切正常。但是,我想通过@article.pictures 访问这些图片,而无需创建单独的图片模型。我已经在 Article 和 Ckeditor::Picture 之间创建了一个常规关联。但是当我上传图片时,Ckeditor 毫不奇怪地需要文章 ID。我应该在哪里以及如何通过它?
class CreateCkeditorAssets < ActiveRecord::Migration[5.2]
t.references :article, foreign_key: true
end
class Article < ApplicationRecord
has_many :pictures, class_name: 'Ckeditor::Picture'
end
class Ckeditor::Picture < Ckeditor::Asset
belongs_to :article
end
您不能传递文章 ID,因为在您上传图片时您的文章不会保留(除非您正在编辑已保存的文章)。
所以你可以做的是用一些唯一的标记构建一篇文章,然后在上传图片并保存文章后,更新 article_id
所有具有相同标记的图片。
像这样:(伪代码,未测试)
class Article < ApplicationRecord
has_many :pictures, class_name: 'Ckeditor::Picture'
after_save :assign_pictures
private
def assign_pictures
Ckeditor::Picture.where(token: picture_token).update_all(article_id: id)
end
end
-
class Ckeditor::Picture < Ckeditor::Asset
belongs_to :article, optional: true
end
-
class Ckeditor::PicturesController
def create
@picture = Ckeditor::Picture.new
@picture.token = params[:picture_token] # pass this param via javascript, see: https://github.com/galetahub/ckeditor/blob/dc2cef2c2c3358124ebd86ca2ef2335cc898b41f/app/assets/javascripts/ckeditor/filebrowser/javascripts/fileuploader.js#L251-L256
super
end
end
-
class ArticlesController < ApplicationController
def new
@article = Article.new(picture_token: SecureRandom.hex)
end
end
显然,您需要将 picture_token
字段添加到您的 Article 模型,并将 token
字段添加到 Ckeditor::Picture
。希望对您有所帮助。
我安装了 Article 模型和 Ckeditor + Paperclip。当我将图片上传到文章正文时,一切正常。但是,我想通过@article.pictures 访问这些图片,而无需创建单独的图片模型。我已经在 Article 和 Ckeditor::Picture 之间创建了一个常规关联。但是当我上传图片时,Ckeditor 毫不奇怪地需要文章 ID。我应该在哪里以及如何通过它?
class CreateCkeditorAssets < ActiveRecord::Migration[5.2]
t.references :article, foreign_key: true
end
class Article < ApplicationRecord
has_many :pictures, class_name: 'Ckeditor::Picture'
end
class Ckeditor::Picture < Ckeditor::Asset
belongs_to :article
end
您不能传递文章 ID,因为在您上传图片时您的文章不会保留(除非您正在编辑已保存的文章)。
所以你可以做的是用一些唯一的标记构建一篇文章,然后在上传图片并保存文章后,更新 article_id
所有具有相同标记的图片。
像这样:(伪代码,未测试)
class Article < ApplicationRecord
has_many :pictures, class_name: 'Ckeditor::Picture'
after_save :assign_pictures
private
def assign_pictures
Ckeditor::Picture.where(token: picture_token).update_all(article_id: id)
end
end
-
class Ckeditor::Picture < Ckeditor::Asset
belongs_to :article, optional: true
end
-
class Ckeditor::PicturesController
def create
@picture = Ckeditor::Picture.new
@picture.token = params[:picture_token] # pass this param via javascript, see: https://github.com/galetahub/ckeditor/blob/dc2cef2c2c3358124ebd86ca2ef2335cc898b41f/app/assets/javascripts/ckeditor/filebrowser/javascripts/fileuploader.js#L251-L256
super
end
end
-
class ArticlesController < ApplicationController
def new
@article = Article.new(picture_token: SecureRandom.hex)
end
end
显然,您需要将 picture_token
字段添加到您的 Article 模型,并将 token
字段添加到 Ckeditor::Picture
。希望对您有所帮助。