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

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

ただいまの
回答率

90.52%

  • Ruby

    7664questions

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

  • Ruby on Rails

    7265questions

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

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

解決済

回答 1

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 403

trafalbad

score 187

このサイトと同様のアプリを作ろうとしています。まず自分の作ったアプリの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
  • 気になる質問をクリップする

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

checkベストアンサー

0

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

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

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/06/25 17:40 編集

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

    キャンセル

  • 2017/06/25 18:38

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

    キャンセル

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

  • ただいまの回答率 90.52%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る

  • Ruby

    7664questions

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

  • Ruby on Rails

    7265questions

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