それで、タイラーのアドバイスで、私は自分がしていたことをもう少し掘り下げました. ckeditor が画像と接続していないため、carrierwave と S3 が原因で、アップローダーから直接情報を取得できません (少なくとも、私にはそう見えます)。
代わりに、ノコギリにこだわっていますが、素晴らしく機能しています。コマンドで実際に行っていたことに気づきましたがopen()
、それはまったく不要でした。Nokogiri は HTML を解析します。@design.content
!の形式で HTML を指定できます。ええと、私の側では。
だから、これは私が自分のサイトをスクレイピングして、ブログエントリに関連付けられた画像を取得する方法です:
design_controller.rb
def create
params[:design][:photo_url] = Nokogiri::HTML(params[:design][:content]).css('img').map{ |i| i['src']}[0]
@design = Design.new(params[:design])
if @design.save
flash[:success] = "Design created"
redirect_to designs_url
else
render 'designs/new'
end
end
def show
@design = Design.find(params[:id])
@categories = @design.categories
@tags = @categories.map {|c| c.name}
@related = Design.joins(:categories).where('categories.name' => @tags).reject {|d| d.id == @design.id}.uniq
set_meta_tags og: {
title: @design.name,
type: 'article',
url: design_url(@design),
image: Nokogiri::HTML(@design.content).css('img').map{ |i| i['src']},
article: {
published_time: @design.published_at.to_datetime,
modified_time: @design.updated_at.to_datetime,
author: 'Alphabetic Design',
section: 'Designs',
tag: @tags
}
}
end
Update アクションには、Create アクションと同じ Nokogiri のコードがあります。
今見ても一目瞭然です(笑)。私はこれについて、認めたくないほど長く考えました...