前提
User モデル
とItem モデル
は1対多の関係- 画像 URL は
link_to
メソッドでコントローラへ渡す
バージョン
Rails 6.1
Ruby 2.7
CarrierWave 2.0
実現したいこと
CarrierWave の remote_#{column}_url メソッドで URL から画像を保存したい
発生している問題
URL から画像を保存しようと :remote_#{column}_url に渡すとエラーが発生して保存できない。
file がないためエラーとなっているようですが、なぜnil
になってしまうのか追求できないでいます。
渡した URL から file が取り出せず nil
となってしまっているということでしょうか?
【エラーメッセージ】
undefined method `closed?' for nil:NilClass
該当のソースコード
【ビュー】
<%= link_to "追加", user_items_path(current_user, item: { remote_image_url: url }), method: :post, type: "button" %>
【コントローラ】
class ItemsController < ApplicationController def create @item = current_user.items.build(item_params) if @item.save # 処理 else # 処理 end end private def item_params params.require(:item).permit(:remote_image_url) end end
試したこと
Rails コンソールから試してみたがやはり保存できませんでした。
> rails c > user = User.find(1) > url = https://xxxxxx.png > user.items.build(name: '画像の名前', remote_image_url: 'url') Traceback (most recent call last): 2: from (irb):24 1: from (irb):25:in `rescue in irb_binding' NoMethodError (undefined method `closed?' for nil:NilClass) > user.items.build(name: '画像の名前', remote_image_url: 'url').save! Traceback (most recent call last): 2: from (irb):24 1: from (irb):25:in `rescue in irb_binding' NoMethodError (undefined method `closed?' for nil:NilClass)
image カラムにローカルの画像を保存することはできました。
> rails c > user = User.find(1) > user.items.build(name: 'ccc', image: File.open(Rails.root.join('app/assets/images/test.jpg'))).save!
あなたの回答
tips
プレビュー