Controllerについて その2(redirect_to)


コントローラ内のアクションについて学習して、少し難しく感じた、
redirect_toとrender
について記事にします。


  • redirect_to

主な役割は以下の二つ。

  1. アプリケーション内の他のアクションを呼び出す。
  2. 他のURLやPATH先にリダイレクトさせる。

他にもパラメーターを渡したりと色々出来るようですが、直近ではまだ恐らく使わないので無視します。 Progateの中では 2. の用途で使うことが多いです。

具体的に自分が使ったような例だと、

def authenticate_user
    if @current_user == nil
      flash[:notice] = "ログインが必要です"
      redirect_to("/login")
    end
  end


のようにユーザーがログインしていない状態の時にlocalhost:3000/login に飛んで戻るというコードです。 アクション名はauthenticate_userインスタンス変数@current_userがない場合(ログインしていない状態)、ログインページに飛ぶという処理です。



記事が長くなりそうなので次回renderについてとredirect_toとの違いについて記事にします。

Controllerについて その1

今日はControllerについてわかったことを記事にしました。

まず、Controllerはブラウザとモデル、ビューの間に入って色々と仲介をしているのだという認識です。実際にコントローラファイル内でアクションを定義してそれを色々なファイルに反映していくようです。

具体的に、

rails generate controller コントローラ名

app/controllersの配下にコントローラ名.rbのファイルが作成されます。 .rb の部分はこのファイルがRubyファイルであることを表しています。

そしてファイル内には

class コントローラ名Controller < ApplicationController
end

とクラスの継承が書かれています。


アクションの定義は普通にRuby

def アクション名
  実行したい処理
end

と先ほどのクラスの中に書いていきます。

コントローラ作成時にアクションも同時に作成できるらしいのですが、他にも色々と覚えることが多いので今は、覚えずに放置します。 アクションの処理を具体的に加えると、

class UsersController < ApplicationController

  def index
    @user = User.all
  end

end

のようなコードになります。

UsersControllerクラスの中にindexという アクションを定義しました。 処理の中身は今回はまだ作っていませんが、データベースの中にあるUserテーブルの全ての値をall メソッドで取得して、インスタンス変数@userの中に代入しています。


今日は以上です。

Controllerとアクションだけでも記事にできることはたくさんあると思うのですが、Progate, tutorial とインプットできる時間が減りそうなので、 どれくらいの頻度で記事を書くのかは少し検討したいと思います。

Ruby on Rails、MVCとインスタンス変数について

MVCのファイル名

最初、Ruby on Railsを使い始めた際にファイル名を覚えるのが大変だったので基本の3つのMVC(model, view, controller)をまとめてみた。

  • routes - routes.rb
  • controller - コントローラー名_controller.rb
  • view - アクション名.html.erb

インスタンス変数

Rubyだとインスタンス変数はメソッドを跨いで使えたが、

Railsだとインスタンス変数はビューの中でも使える。

def show
  @user = User.new
end

はじめまして

はじめまして。

1月1日からはれて無職になった、Nobuoです。

現在、まつしんさんというすごいエンジニアさんのもとでメンティーをしています。 こちらまつしんさんのブログです。

勉強の計画としては当面は 12月中にProgateの html&CSS JavaScript jQuery Ruby Ruby on rails Sass SQL を終わらせることでした。

1月の前半でrails tutorialを読み終わることです。

現在Progateは

残り Ruby on Rails のみ。 あと三日で本当に終わるのか。

ポートフォリオ

https://cpmybbs.herokuapp.com/


また右下にDriftというチャットサービスを埋め込んでいます。 このようなWEBサービスを作れるようになればいいなと考えています。