質問編集履歴

1 修正

trafalbad

trafalbad score 202

2017/06/24 23:58  投稿

ruby on railsのcontrollerのclass名について
このサイトと同様のアプリを作ろうとしています。まず自分の作ったアプリのcontrollerの1行目とmodelは以下のようになっています
[このサイト](http://qiita.com/yoshizaki_kkgk/items/2e40bd4f77140b0c97f8)と同様のアプリを作ろうとしています。まず自分の作ったアプリの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
```
  • Ruby

    9685 questions

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

  • Ruby on Rails

    9085 questions

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

思考するエンジニアのためのQ&Aサイト「teratail」について詳しく知る