LoginSignup
0
2

More than 5 years have passed since last update.

rails 備忘録1

Posted at

初めて自分でアプリ制作を行った際に自分がめちゃくちゃ苦労した事を挙げていく

haml記法での変数の記入方法

haml記法でDBから画像を取得して表示する時は主にimage_tagを使用しました。
link_toと併用して、画像をリンクにする方法

index.html.haml
- @menus.each do |menu|
  = link_to image_tag( menu.image, class: 'thumnail-menu'), menu_path(menu.id), method: :get

ここでのもう一つのポイントは、パスに変数を入れなければならなかった時、どう記入するかである。
menu_path単独では、そのimageに結びつく詳細表示画面にアクセスができないので、(menu.id)でmenuのidを取得する必要があった。

しかしshowアクションで定義したviewでは

show.html.haml
  = link_to image_tag( @menu.image, class: 'thumnail-food'), '#'
  %ul.detail-info
    %li.detail-info__title 
      = @menu.title
    %li.detail-info__price
      価格: ¥#{  @menu.price } 
    %li.detail-info__calorie
      カロリー: #{ @menu,calorie }kcal
menus_controller.rb
def show
    @menu = menu.find(params[:id])
    @reviews = @menu.reviews.includes(:user).order('created_at DESC')
    @review = Review.new
  end

このようにコントローラーで定義されたインスタンス変数@menuによってカラムのデータを取得している。

indexではすでに@menus.each doで@menuからのデータを毎回取得している。 
しかしshowでは一つづつインスタンス変数を記入する必要がある。

form_forの使用方法

初めのうちはform_tagばかり使っていましたが、何かと融通がきくform_forを使ってレビュー投稿画面の作成をしました。

reviewsはmenusに対して1対多のの関係であるため、ルーティングはネストされている。

そのため、form_forに指定する引数として、@menus, @reviewの二つを指定する。

show.html.haml
.forms
  - if current_user
    .form
      = form_for [@menu, @review] do |f| 
        = f.text_area  :text, placeholder: "レビューを書く"
        %br/
        = f.submit 'post'
      = link_to 'X close', '#', class: 'post-close'

コントローラー側ではcreateアクションにて@reviewインスタンスを生成する。

menus_controller.rb
def show
    @menu = Menu.find(params[:id])
    @reviews = @menu.reviews.includes(:user).order('created_at DESC')
    @review = Review.new
end

色々参考にしたものの中ではこのブログが一番わかりやすいかも
https://cre8cre8.com/rails/how-to-use-form_for.htm
リンクの飛ばし方は他にも色々あるみたいです。

0
2
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
0
2