前提・実現したいこと
ここに質問の内容を詳しく書いてください。
ruby初学者です。
現在、画像投稿アプリケーションを作成しています。
そのため肝心な画像の複数枚保存ができない状態になっています。
localに保存ができるようにconfigのActive_storageの保存場所はlocalになっています。
画像を一枚のみの保存に関してはできました。
画像の複数枚投稿ができるようにお力添え願いたいです。
発生している問題・エラーメッセージ
エラーメッセージでないエラーです
コントローラー内の、
render :new
によって入力画面に戻ってしまいます。
該当のソースコード
ruby/app/controllers/tweets_controller.rb
1class TweetsController < ApplicationController 2 before_action :move_to_index, except: [:index, :show, :search] 3 before_action :set_tweet, only: [:edit, :show] 4 5 6 def index 7 @tweets = Tweet.includes(:user).order("created_at DESC") 8 end 9 10 def new 11 @tweet = Tweet.new 12 end 13 14 def create 15 @tweet = Tweet.new(tweet_params) 16 if @tweet.valid? 17 @tweet.save 18 redirect_to root_path 19 else 20 render :new 21 end 22 end 23 24 def destroy 25 @tweet = Tweet.find(params[:id]) 26 if user_signed_in? && current_user.id == @tweet.user_id 27 @tweet.destroy 28 redirect_to root_path 29 end 30 31 def edit 32 @tweet = Tweet.find(params[:id]) 33 end 34 35 def update 36 @tweet = Tweet.find(params[:id]) 37 @tweet.update(tweet_params) 38 if @tweet.valid? 39 @tweet.save 40 redirect_to root_path 41 else 42 render :new 43 end 44 end 45 46 def show 47 @comment = Comment.new 48 @comments = @tweet.comments.includes(:user) 49 end 50 51 def search 52 @tweets = Tweet.search(params[:keyword]) 53 end 54 55 56 57 private 58 def tweet_params 59 params.require(:tweet).permit(:text, :season_id, :prefecture_id, :category_id, images: []).merge(user_id: current_user.id) 60 end 61 62 def set_tweet 63 @tweet = Tweet.find(params[:id]) 64 end 65 66 def move_to_index 67 unless user_signed_in? 68 redirect_to action: :index 69 end 70 end 71end 72
ruby/app/models/tweet.rb
1 2コード 3class Tweet < ApplicationRecord 4 has_many_attached :images 5 belongs_to :user 6 has_many :comments 7 8 extend ActiveHash::Associations::ActiveRecordExtensions 9 belongs_to_active_hash :category 10 belongs_to_active_hash :season 11 belongs_to_active_hash :prefecture 12 13 14 with_options presence: true do 15 validates :text 16 validates :category_id 17 validates :prefecture_id 18 validates :season_id 19 validates :images 20 end 21 22 with_options numericality: { other_than: 1 } do 23 validates :category_id 24 validates :season_id 25 validates :prefecture_id 26 end 27 28 def self.search(search) 29 if search != "" 30 Tweet.where('text LIKE(?)', "%#{search}%") 31 else 32 Tweet.all 33 end 34 end 35 36end 37 38 39### 試したこと 40 41binding.pryで保存の際に送られる値を確認しました。
コード
[1] pry(#<TweetsController>)> params => <ActionController::Parameters {"authenticity_token"=>"q9ut1vnkzXe8CmI9FgYG/vtigCuhPeb4hlUcSJlMZ3i9wYZpc4MceuiaL9VVkz4yzJ+mOzRCtGevtcvFn8JZ1w==", "tweets_tag"=>{"images"=>[#<ActionDispatch::Http::UploadedFile:0x00007ffbf7c0fa58 @tempfile=#<Tempfile:/var/folders/5q/pj4mjxp97vbdhyyxgyyblx8w0000gn/T/RackMultipart20201114-3484-8oa2ey.jpeg>, @original_filename="A0D8AC58-A69A-48D4-B2A6-46B5935EDB72.jpeg", @content_type="image/jpeg", @headers="Content-Disposition: form-data; name=\"tweets_tag[images][]\"; filename=\"A0D8AC58-A69A-48D4-B2A6-46B5935EDB72.jpeg\"\r\nContent-Type: image/jpeg\r\n">]}, "tweet"=><ActionController::Parameters {"category_id"=>"5", "season_id"=>"3", "prefecture_id"=>"3", "text"=>"aaa"} permitted: false>, "commit"=>"SEND", "controller"=>"tweets", "action"=>"create"} permitted: false> [2] pry(#<TweetsController>)> @tweet => #<Tweet:0x00007ffbf6e2ea38 id: nil, text: "aaa", season_id: 3, category_id: 5, prefecture_id: 3, created_at: nil, updated_at: nil, user_id: 2>
補足情報(FW/ツールのバージョンなど)
ver6.0.0で開発を行なっております。
現在は投稿機能のみのはじめたてです
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/11/16 04:34