LoginSignup
2
0

More than 3 years have passed since last update.

【Rails】別Viewへの移動方法

Last updated at Posted at 2020-11-09

本投稿の目的

Railsの操作をメモするために議事録として書いていきます。


学習に使った教材

Udemyの "はじめてのRuby on Rails入門-RubyとRailsを基礎から学びWebアプリケーションをネットに公開しよう" を教材として使用しました。


①link_toの使い方

qiita.rb
link_to 'リンク名', 'Prefix名 + _path'

・viewヘルパーという
・htmlを自動で作成してくれる (href作成をしてくれる)

○リンク名
⇨viewに文字列として表示したことを記述

○'Prefix名 + _path'
⇨rails routesのPrefixを使用する (_pathが必要)


【id付きURLパターン時の書き方】

・Prefixに紐づくURLパターンに着目
・URLパターンに :id のような一意に定められない変数が含まれることがある
・*(一意に定まる時は,上の記述のみでOK)

・この場合,'Prefix + _path + (each do | | で生成した値)' と記述
・each do | | で生成した値は,インスタンス変数から生成
・*(インスタンス変数はcontrollerで生成ずみの前提)

qiita.rb
@インスタンス変数 each do |インスタンス名|

・このインスタンス名には,インスタンス変数の複数のキャッシュが格納されていく
・column名 =id となる値を URLパターンの :id へ変換
・urlの:idところに引数の:id を含んだ形で記述したことになる

例えば,

Prefix          URL Pattern
edit_question   question/:id/edit

・このPrefixに紐づくURLパターンには:idが含まれる
・そのため,(インスタンス名)も記述が必要

qiita.rb
<% @question each do |question| %>
<%= link_to 'Edit', edit_question_path(question) %>
<% end %>

【解説】
・インスタンス名であるquestionには,[:id,:name,:title,:content]が格納されている
・この内,:id を自動で拾ってきてURLパターンに当てはめてくれる


【Prefixを使用しない書き方】

・link_toの第2引数にオブジェクト名を指定
・そのオブジェクトの:idをpathに含むURLへ自動でつなぐ
・:idを含むURLへのアクセスをlink_toで実行する場合はこの方法を使用

qiita.rb
<% @question each do |question| %>
<%= link_to 'Edit', question %>
<% end %>

【deleteアクションへ直接接続】

・擬似的にDelteメソッドを再現するRailsの仕組みの一つ
・link_to の第3引数に method: :delete を追加
・htmlの属性にdata-method属性="delete"となる
・クリックで自動的に _method=delete というパラメータを送信

qiita.rb
<% @question each do |question| %>
<%= link_to 'Edit', question  ,method: :delete  %>
<% end %>

②redirect_toの使い方

qiita.rb
ridirect_to 'Prefix名 + _path'

・指定したURLへ移動させるメソッド
・基本的に考え方は,①link_toメソッドと同じ
・違いは,Controller上に記載する
・そのため,viewへ表示しないので'リンク名'は不要
・また,URLパターンのPrefix時にはインスタンス変数そのものを使用可能
・(Class内で記載のためインスタンス変数 each do |インスタンス名| は不要)


【id付きURLパターン時の書き方】

qiita.rb
  def アクション
    @インスタンス変数 = モデル名.find(params[:id])
    redirect_to question_path(@question)
  end

【解説】
・pramasnについては別途まとめるのハッシュ名だと思ってスルーしてください。
@questionから :id を取得してURLパターンに当てはめてくれる

【一つ前の階層のpathへ戻る書き方】

qiita.rb
redierct_to :back

・pathの一つ前の階層へredirectさせる
*(A/B/C → A/B にridirect)

③renderの使い方

qiita.rb
render :htmlファイル名

・①②と同様にURLへ飛ばすメソッド
・注意点は,Prefixではなくhtmlファイルの名前を :htmlファイル名 で指定
・基本的にアクション内で使用する
・アクション実行時の処理がfaulseした際に使用
・アクション実行条件のpathへアクセスする前のpathへ返す

qiita.rb
  def アクション
    @インスタンス変数 = モデル名.find(params[:id])
    render :new
  end

④redirect_toとrenderの使われ方

・ここでは,PrefixでURLパターンが一意に定まる場合の例を説明

qiita.rb
  def create
    @question = Question.new
    if @question.save
      redirect_to root_path, notice: 'Success!'
    else
      flash[:alert] = 'Save error!'
      render :new
    end
  end

【解説】
・アクション実行後に向かうURLを2つに分岐させる (redirect_to側 or render側 )
@questionにQuestionモデルからインスタンス生成
・@question.saveで値を保持
・ここで正しく,値が保存できたら redirect_toのPrefixへ移動
・保存失敗時は, new.html.erb  に戻る

○notice: 'Success!'
⇨redirect_to後のURLにアクセス時にユーザーへ'Success!' と表示

○flash[:alert] = 'Save error!'
⇨戻されたview画面でユーザーへ'Save error!' と表示

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0