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

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

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

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

Ruby on Rails

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

Q&A

解決済

1回答

514閲覧

ruby on railsのcontrollerのclass名について

trafalbad

総合スコア303

Ruby

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

Ruby on Rails

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

0グッド

0クリップ

投稿2017/06/24 14:57

編集2017/06/24 14:58

このサイトと同様のアプリを作ろうとしています。まず自分の作ったアプリのcontrollerの1行目とmodelは以下のようになっています

model Project controller(projects_controller.rb)1行目 class ProjectsController < ApplicationController

模範としているこのサイトのmodelとcontroller(register_controller.rb)の1行目は、以下のようになっています。

Model Register controller(register_controller.rb)の1行目 class Image::RegisterController < ApplicationController

(以下はprojects_controller.rbのアクションと同じ。)

【質問1】
register_controller.rbのRegisterController < ApplicationControllerの前にImage::とついてるのはどういう意味なのでしょうか。おそらくルーティングが関係していると思われるのですが、

【質問2】
またclass Image::RegisterControllerとなるcontrollerを作成するにはどうしたらいいのでしょうか?

rake routesコマンドの結果とroutes.rb、およびprojects_controller.rbのコードは以下のようになっています。

#Rake routes Prefix Verb URI Pattern Controller#Action project_tasks POST /projects/:project_id/tasks(.:format) tasks#create project_task DELETE /projects/:project_id/tasks/:id(.:format) tasks#destroy projects GET /projects(.:format) projects#index POST /projects(.:format) projects#create new_project GET /projects/new(.:format) projects#new edit_project GET /projects/:id/edit(.:format) projects#edit project GET /projects/:id(.:format) projects#show PATCH /projects/:id(.:format) projects#update PUT /projects/:id(.:format) projects#update DELETE /projects/:id(.:format) projects#destroy image_register POST /image/register(.:format) image/projects#register image_next POST /image/next(.:format) image/projects#next image_reset GET /image/reset(.:format) image/projects#reset image_download GET /image/download(.:format) image/projects#download image_delete DELETE /image/delete(.:format) image/projects#delete POST /projects/:project_id/tasks/:id/toggle(.:format) tasks#toggle root GET / projects#index
#routes.rb Rails.application.routes.draw do resources :projects do resources :tasks, only: [:create, :destroy] end namespace :image do post 'register' => 'projects#register' post 'next' => 'projects#next' get 'reset' => 'projects#reset' get 'download' => 'projects#download' delete 'delete' => 'projects#delete' end
#controller.rb class ProjectsController < ApplicationController def index tmp = TmpImage.first @image = tmp[:filename] @blocks = TextBlock.view_css(tmp[:image_id]) end def set_project tmp = TmpImage.first @image = tmp[:filename] @blocks = TextBlock.view_css(tmp[:image_id]) end def register pos = params[:pos] text = TextBlock.create( image_id: TmpImage.first[:image_id], text: pos[:text], x1: pos[:pos1_x1], y1: pos[:pos1_y1], x2: pos[:pos2_x2], y2: pos[:pos2_y2] ) redirect_to root_path end # *** 前の操作を取り消すメソッド *** def delete TextBlock.last.delete redirect_to root_path end # *** 次の画像に移動するメソッド *** def next # 現状の画像を完了に tmp = TmpImage.first image = Image.find_by(filename: tmp[:filename]) image.update(is_complete: true) # 新しい画像に切り替える files = Dir::entries("app/assets/images/") files.each do |file| next unless %w(.jpg .png .jpeg).include?(File.extname(file)) # ファイル名が既に書き込まれていないか確認 db_files = Image.where(filename: file) if db_files.empty? image = Image.create(filename: file) TmpImage.first.update(filename: file, image_id: image.id) break end end # トップページへ遷移 redirect_to root_path end # *** ダウンロードページ *** def download respond_to do |format| format.html format.csv do filename = 'recognition_result' headers['Content-Disposition'] = "attachment; filename=\"#{filename}.csv\"" end end end # *** リセット(初期化)用のページ *** def reset # データベースの中身を削除する Image.delete_all TmpImage.delete_all TextBlock.delete_all # 最初の画像を指定する ※ サンプル画像以外の場合はこちらを書き換え image = Image.create(filename:"00asfs1.jpg") TmpImage.create(filename:image[:filename], image_id: image.id) redirect_to root_path end end

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

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

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

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

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

guest

回答1

0

ベストアンサー

ルーティングのnamespace :imageがポイントで、これを付けると、URLはimage/付きに、コントローラーはImage::の名前空間付きになります。

なお、Image::RegisterControllerapp/models/image/register_controller.rbというファイル名で作れば自動的にロードされます。

投稿2017/06/25 00:45

編集2017/06/25 00:45
maisumakun

総合スコア145183

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

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

trafalbad

2017/06/25 09:31 編集

app/models/image/register_controller.rbはmodel下にimageディレクトリはどのように作成すればいいのでしょうか?
trafalbad

2017/06/25 09:38

mkdirで解決しました。ありがとうございました
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問