質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Ruby on Rails 5

Ruby on Rails 5は、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

RubyGems

RubyGemsはRubyによるプログラミングのためのパッケージマネジメントツールです。ユーザはこれを使用することで、Rubyライブラリのダウンロードやアップデートや、依存関係の自動解決が可能になります。

Webサイト

一つのドメイン上に存在するWebページの集合体をWebサイトと呼びます。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Q&A

0回答

260閲覧

rails sやrails db:migrateが実行できなくなった

kyamamoto

総合スコア0

Ruby on Rails 5

Ruby on Rails 5は、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

RubyGems

RubyGemsはRubyによるプログラミングのためのパッケージマネジメントツールです。ユーザはこれを使用することで、Rubyライブラリのダウンロードやアップデートや、依存関係の自動解決が可能になります。

Webサイト

一つのドメイン上に存在するWebページの集合体をWebサイトと呼びます。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

0グッド

0クリップ

投稿2020/05/19 04:39

編集2020/05/22 07:54

前提・実現したいこと

Ruby on Railsで投稿に画像を貼り付けようとしています。
投稿に貼り付けられた画像の表示位置を入れ替える機能を実装するために「acts_as_list」を導入したところ、Railsサーバーの起動やマイグレーションが実行できなくなりました。
ルーティングなどの設定を見直したのですが、おかしな点がわかりませんでした。
どうすればこのエラーが解決するのでしょうか?

発生している問題・エラーメッセージ

undefined local variable or method `on' for #<ActionDispatch::Routing::Mapper:0x00007fc236c67320> (NameError)

該当のソースコード

routes.rb

Ruby

1Rails.application.routes.draw do 2 root "top#index" 3 get "about" => "top#about", as: "about" 4 get "bad_request" => "top#bad_request" 5 get "forbidden" => "top#forbidden" 6 get "internal_server_error" => "top#internal_server_error" 7 8 resources :user do 9 get "search", on: :collection 10 resources :posts, only: [:index] 11 end 12 13 resource :session, only: [:new, :create, :destroy] 14 resource :account, only: [:show, :edit, :update] 15 resource :password, only: [:show, :edit, :update] 16 17 resources :articles 18 resources :posts do 19 resources :images, controller: "post_images" do 20 patch :move_higher, :move_lower, on: :user 21 end 22 end 23end 24

post_image.rb

Ruby

1 2class PostImage < ApplicationRecord 3 belongs_to :post 4 has_one_attached :data 5 acts_as_list scope: :post 6 7 attribute :new_data 8 9 validates :new_data, presence: { on: :create } 10 11 validate if: :new_data do 12 if new_data.respond_to?(:content_type) 13 unless new_data.content_type.in?(ALLOWED_CONTENT_TYPES) 14 errors.add(:new_data, :invalid_image_type) 15 end 16 else 17 errors.add(:new_data, :invalid) 18 end 19 end 20 21 before_save do 22 self.data = new_data if new_data 23 end 24end 25

20200518065812_create_post_images.rb

Ruby

1class CreatePostImages < ActiveRecord::Migration[5.2] 2 def change 3 create_table :post_images do |t| 4 t.references :post # 外部キー 5 t.string :alt_text, null: false, default: "" # 代替テキスト 6 t.integer :position # 表示位置 7 8 t.timestamps 9 end 10 end 11end 12

post_image_controller.rb

Ruby

1class PostImagesController < ApplicationController 2 before_action :login_required 3 4 before_action do 5 @post = current_user.posts.find(params[:post_id]) 6 end 7 8 # 画像一覧 9 def index 10 @images = @post.images.order(:position) 11 end 12 13 # 編集フォームにリダイレクト 14 def show 15 redirect_to action: "edit" 16 end 17 18 # 新規登録フォーム 19 def new 20 @image = @post.images.build 21 end 22 23 # 編集フォーム 24 def edit 25 @image = @post.images.find(params[:id]) 26 end 27 28 # 新規作成 29 def create 30 @image = @post.images.build(image_params) 31 if @image.save 32 redirect_to [@post, :images], notice: "画像を作成しました!" 33 else 34 render "new" 35 end 36 end 37 38 # 更新 39 def update 40 @image = @post.images.find(params[:id]) 41 @image.assign_attributes(image_params) 42 if @image.save 43 redirect_to [@post, :images], notice: "画像を更新しました!" 44 else 45 render "edit" 46 end 47 end 48 49 # 削除 50 def destroy 51 @image = @post.images.find(params[:id]) 52 @image.destroy 53 redirect_to [@post, :images], notice: "画像を削除しました!" 54 end 55 56 # 表示位置を上げる 57 def move_higher 58 @image = @post.images.find(params[:id]) 59 @image.move_higher 60 redirect_back fallback_location: [@post, :images] 61 end 62 63 # 表示位置を下げる 64 def move_lower 65 @image = @post.images.find(params[:id]) 66 @image.move_lower 67 redirect_back fallback_location: [@post, :images] 68 end 69 70 # ストロング・パラメータ 71 private def image_params 72 params.require(:image).permit( 73 :new_data, 74 :alt_text 75 ) 76 end 77end 78

posts_helper.rb

Ruby

1module PostsHelper 2 def the_first_image(post) 3 image = post.images.order(:position)[0] 4 5 render_post_image(image) if image 6 end 7 8 def other_images(post) 9 buffer = "".html_safe 10 11 post.images.order(:position)[1..-1]&.each do |image| 12 buffer << render_post_image(image) 13 end 14 15 buffer 16 end 17 18 private def render_post_image(image) 19 content_tag(:div) do 20 image_tag image.data.variant(resize: "530x>"), 21 alt: image.alt_text, 22 style: "display: block; margin: 0 auto 15px" 23 end 24 end 25end 26

補足情報(FW/ツールのバージョンなど)

ruby 2.5.1
Rails 5.2.4.2
acts_as_list 1.0.1

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問