ゆうじろ〜のWEBエンジニア日記

アップ主が勉強内容をアウトプットし、サボらないようにする為のブログ

<DAY125>ドリルを解いて

●6/26(火)

●学習日数 125日

●学習時間(本日)9時間

●累計学習時間 648.5時間

●一日あたりの平均学習時間 5.11時間

問題文

あなたは警官です。aとb二人の容疑者の取り調べをしています。

どちらも証言がTrue、またはFalseであればその証言はTrueです。

しかしどちらかがFalseでTrueであればその証言はFalse、と出力するメソッドを作りましょう。

呼び出し方:

police_trouble(a, b)とする。

 回答

def police_trouble(a, b)
  if a && b || !a && !b
    puts "True"
  else
    puts "False"
  end
end

<DAY124> ぼっち演算子について

●6/25(月)
●学習日数 124日
●学習時間(本日)0時間
●累計学習時間 639.5時間
●一日あたりの平均学習時間 5.11時間

ぼっち演算子とは?

値がnilの時にエラーを返すのでなく、nilを返し、nilを格納してくれる。
nilになる場合に、エラーをを回避したい時に使う事ができる。

&はsafe navigation operator、 lonely operator(ぼっち演算子)が正式名称。
&の記号が一人ぼっちで膝を抱えている人に見えるところが名前の由来。
記述がRuby2.3からできる。


使用例

ログイン中のユーザーのニックネームを取得したいが、取得できないシチュエーション

@nickname = current_user&.nickname

<DAY123>学習忘備録(休日)

●6/24(日)
●学習日数 124日
●学習時間(本日)0時間
●累計学習時間 629.5時間
●一日あたりの平均学習時間 5.00時間

1日振り返り

家の模様替え。TVの配置を変えイメージ一新。
電子レンジ購入。ラグ購入。
夜はお好み焼き <きじ>で食事。
その後は、国際フォーラムの中に。なかなかリッチな感じ。

<DAY122>carrierwaveを用いた画像表示と連続投稿について

●日程 6/23(土)

●学習日数 122日

●学習時間(本日)10 時間

●累計学習時間 629.5時間

●一日あたりの平均学習時間 5.11時間

結論

  • gem、carrerwaveを導入する
  • アップローダーを作成する
  • 保存したいモデルとカラムを指定する
  • ストロングパラメーターの設定

filed forにてデータを渡すモデルを分けていますので、

ストロングパラメーターの渡し方が違います。

gemの導入

gem 'carrierwave'

アップローダーの作成

コマンド操作で可能。

bundle exec rails g uploader item_Image

アップローダの中身割愛。store_dir以外はコメントアウトの状態。

app/uploder/item_image.rb

class ImageUploader < CarrierWave::Uploader::Base

 
  def store_dir
    "uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}"
  end

 
end

モデルの設定

どのモデルの何のカラムを拾うのかを設定 今回はitem_imageモデルのimageカラムをアップロードの対象としている。

class ItemImage < ApplicationRecord

  belongs_to :item,optional: true
  mount_uploader :image, ImageUploader

end

ストロングパラメーターの設定

item_imageモデルの情報を受け取るので、このような形 itemとitem_imageの関係は1対多であり、imagesを複数持つので 複数形となる。

params.require(:item).permit(:name,item_images_attributes:[:image])

コントローラの設定

投稿したい画像の分、インスタンスを生成する。

 5.times{@item.item_images.build}

#viewの形

このような形になっている

 = form_for @item do |f|
   = f.text_field :name
   = f.fields_for :item_images do |i|
     = i.file_field :image

参考文献

qiita.com

qiita.com

<DAY121>filed forを用いた投稿について

●学習日数 121日 6/21

●学習時間(本日)6時間
●累計学習時間 619.5時間

●一日あたりの平均学習時間 5.11時間

フォームがらみの学びを具現化

filed forについて

from forのオプション。異なるモデルにデーターを保存したいときに使用ができる。

(例)

カラム名 保存先 備考
name itemsテーブル 他にも色々あるが割愛
item_image item_imagesテーブル 画像を複数投稿するためにテーブルを分けている

記載方法

= form_for @item do |f|
  = f.text_field :name

  = f.fields_for :item_images do |i|
    = i.file_field :image

<DAY120>active hashについて

●学習日数 120日 6/20

●学習時間(本日)8時間
●累計学習時間 613.5時間

●一日あたりの平均学習時間 5.11時間

activehashについて

テーブルデーターを作らず、モデルのみ作成し、データーを保存するやり方。
静的なデーターに対して使用するのが望ましい。
DB作成するまでもないが、viewにデーターを書き込むには膨大すぎるケースに使用が可能。

都道府県データーを格納。

プルダウン方式で都道府県を表示したい時。
このような場合に使えます。

導入 gemの導入

gemを入れてbundle install

gem 'active_hash'

導入 モデルの作成

継承するのは、通常のモデルと異なり
ActiveHash::Baseである事を注意する。
ハッシュ形式で記入する。


class Prefecture < ActiveHash::Base
  self.data = [
      {id: 1, name: '北海道'}, {id: 2, name: '青森県'}, {id: 3, name: '岩手県'},
      {id: 4, name: '宮城県'}, {id: 5, name: '秋田県'}, {id: 6, name: '山形県'},
      {id: 7, name: '福島県'}, {id: 8, name: '茨城県'}, {id: 9, name: '栃木県'},
      {id: 10, name: '群馬県'}, {id: 11, name: '埼玉県'}, {id: 12, name: '千葉県'},
      {id: 13, name: '東京都'}, {id: 14, name: '神奈川県'}, {id: 15, name: '新潟県'},
      {id: 16, name: '富山県'}, {id: 17, name: '石川県'}, {id: 18, name: '福井県'},
      {id: 19, name: '山梨県'}, {id: 20, name: '長野県'}, {id: 21, name: '岐阜県'},
      {id: 22, name: '静岡県'}, {id: 23, name: '愛知県'}, {id: 24, name: '三重県'},
      {id: 25, name: '滋賀県'}, {id: 26, name: '京都府'}, {id: 27, name: '大阪府'},
      {id: 28, name: '兵庫県'}, {id: 29, name: '奈良県'}, {id: 30, name: '和歌山県'},
      {id: 31, name: '鳥取県'}, {id: 32, name: '島根県'}, {id: 33, name: '岡山県'},
      {id: 34, name: '広島県'}, {id: 35, name: '山口県'}, {id: 36, name: '徳島県'},
      {id: 37, name: '香川県'}, {id: 38, name: '愛媛県'}, {id: 39, name: '高知県'},
      {id: 40, name: '福岡県'}, {id: 41, name: '佐賀県'}, {id: 42, name: '長崎県'},
      {id: 43, name: '熊本県'}, {id: 44, name: '大分県'}, {id: 45, name: '宮崎県'},
      {id: 46, name: '鹿児島県'}, {id: 47, name: '沖縄県'}
  ]

end

アソシエーションを組む

関係のあるモデルとの関係を記載。これを怠ると使えません・

itemモデルが関係あったので、itemモデルに以下を記載。

extend ActiveHash::Associations::ActiveRecordExtensions
  belongs_to_active_hash :prefecture
end

使い方 view

  .select__wrap
    = f.collection_select :prefecture_id, Prefecture.all, :id, :name