初心者からのエンジニア日記

2020年6月末~TECH::CAMPにて本格的にプログラミング学習を開始。 販売職/店長を経て、駆け出しエンジニアの道へ一歩踏み出しました! 様々なアウトプットをしていきたいと思います! HTML/CSS,Ruby,Ruby on Rails,Java Script,jQuery,Haml/Scss,GitHub...

【Ruby】投稿画像が文字列で表示されてしまう問題の解決策

エラーは表題の通り、

本来、投稿した画像が表示されるべきはずの場所に

「/public/uploads/post/image/○○.jpg」

といったような形で、

ファイルが存在するディレクトリが表示されてしまうものです。

※エラー画面は出ません。

 

原因

postsテーブルに「image」という名前のカラムを作ったため。

 

解決策

カラム名を「image」にした場合に限り、「to_sメソッド」で表示を文字列に変換する必要がある。 

※to_sメソッド……文字列以外のオブジェクトを文字列に変換できるメソッド

 

解説

修正前】index.html.haml

- @posts.each do |post| 
  = post.text
  = post.image

問題は「image」というカラム名だったのでimage_tagを使い

以下のように修正したところ画像が表示されました!

 

修正後】index.html.haml

- @posts.each do |post|
  = post.text
  = image_tag(post.image.to_s)

 

エラーの際に確認したこと

- テーブルはformを使って送ったパラメータを受け取れているか

- コントローラーのファイルに記載したメソッドに誤りはないか(正しい値が遅れているか)

 

 以上!

少しでも他の方のヒントになるよう記録を残しておきます!

Hamlはインデントのエラーも出やすいので、

丁寧なコード記述を心がけたいですね!

 

 

参考URL

https://rails-ambassador.herokuapp.com/tips/HerokuCloudinaryCarrierwave

【Ruby】search,each_with_index

本日、学習中のRubyドリル問題で引っかかった点をアウトプットします!

 

 

問題.以下の配列から数を探して何番目に含まれているか

   結果を返すメソッドをsearchとeach_with_indexを用いて作成しなさい

input = [3, 5, 9, 12, 15, 21, 29, 35, 42]

 

↓答えはこちら↓

def search(target_num, input)

  input.each_with_index do |num, index|
    if num == target_num
      puts "#{ index + 1 }番目にあります"
      return
    end
  end
  puts "その数は含まれません"
end
 input = [3, 5, 9, 12, 15, 21, 29, 35, 42]
search(11, input)

 

この時私は「if文なのでelseを使おう!」と思ってしまったわけなのですが、

ここでelseを用いてしまうとうまくいきません

 

 

解説.

答えは単純なのですが、elseを用いてしまうと

if num == target_num

の部分でfalseとなった時点で「return false」をしてしまうためです。

 

問題の通りに出力したい場合

target_num(目的の数)が見つかった時点でtrueを返して終了

もしくは

目的の数が見つからなければeachループが終わった時点でfalseを返す

というメソッドを作成しなければいけないのです・・・!

 

 

またひとつ、賢くなれた朝でした・・・

 

 

TECH::CAMPのサポート体制

TECH::CAMPで学習を始めて約3週間が経ちました。

この学習をスタートからゴールまでサポートしてくれる、

それが『ライフコーチ』と呼ばれる方です。

 

ライフコーチとは決まった時期に加えて、

自分で申し出れば様々なタイミングで面談をしていただけます。

 

「学習に疲れた時、ちょっと話したい時でも良いです!

  いつでも呼んでくださいね!」

 

という心強いお言葉を頂き、お陰様でその言葉を胸に毎日頑張れています。

 

主に学習の進捗等、メンタル面でもサポートしてくださるのですが、

私の担当のIさんと面談する度「プロだなあ、すごいなあ」と

思う場面が何度もあってとても感動しております。

特に観察力と人の長所を見つける能力がとても高い方です。

自分が何気なく意識していることも

ここが素敵です!」と言語化して伝えてくださるので、

自分の強みが明確に形として見えてきます。

 

これはもちろんライフコーチに限らず、

技術面をサポートしてくれる『メンター』も同じです。

常にポジティブな方向に舵が切れるよう考えてお話をしてくださいます。

 

ここは理解できていますので、こうすれば解決すると思います!

ヒントを参考にやってみてくださいね!

といったアドバイスをくださるので、

自分の理解度が測れると同時に

自分がどこで引っ掛かりやすいのか分かるので質問しまくってます!笑

 

 

 

プログラミング学習って

どうしても心が折れそうな時が絶対にあると思います。

そんな時、支えになってくれるものがあるって本当に大切です。

私にはTECH::CAMPのやり方が肌に合っていたのかもしれません。

今後も全力で頑張っていけそうです!

 

 

【Rails】バリデーション

本日のアウトプット

・バリデーション

・NOT NULL制約

・一意性制約

・主キー制約

・外部キー制約

 

 

 

バリデーション

データを登録する際に、一定の制約をかけること。

バリデーションを設ける際は、モデルに記載する。

class Tweet <ApplicationRecord
  validates :text, presence: true
end

 

 

NOT NULL制約

テーブルの属性値にNULL(空の値)が入ることを許さない制約。

create_table :users do |t|
  t.string :name, null: false
  t.timestamps null: false
end

↑「null: false」と記述することでNOT NULL制約を設定できる。

 

 

一意性制約

カラムに設定する制約。

一意性制約を設定したカラムは同じ値を設定できない。

add_index :テーブル名, :カラム名, unique: true

 

 

主キー制約

主キーである属性値が必ず存在、かつ重複していないことを保証する制約。

主キーに対してNOTNULL制約と一意性制約の両方を設定するのと同義。

Railsでテーブルを作成する際、主キー制約は元々実装されており、

主キーはisカラムとして自動生成される。

(idカラムの値は重複しない)

 

 

外部キー制約

外部キーに対応するレコードが必ず存在することを保証する制約。

 

 

 

 

 

【Rails】CRUD,resourcesメソッド,ストロングパラメーター

本日のアウトプット

CRUD

・7つのアクション

・resources

・onlyオプション,exceptオプション

・ストロングパラメーター

 

 

CRUD

アプリケーション機能は、以下の4つの処理を組み合わせながら実装する。

  • C(create)...生成
  • R(read)...読み取り
  • U(update)...更新
  • D(delete)...削除

テータ取り扱いに関しての基本的な処理の頭文字を並べたのがCRUDである。

 

 

7つのアクション

CRUDを実現するには、それぞれの処理を記述する必要がある。

Railsにはそれらのアクションの設定が慣習的に決められている。

  • index...一覧表示
  • show...詳細表示
  • new...生成
  • create...保存
  • edit...編集
  • update...更新
  • destroy...削除

 

 

resources

上記7つのアクションへのルーティングを自動生成するメソッド。

 

例:

Rails.application.routes.draw do

  resources :tweets

end

 

resourcesの引数に:tweetsと言うシンボルを指定すると

/tweetsのパスに対応する全てのルーテングが生成・設定される。

 

 

onlyオプション,exceptオプション

only...resourcesにオプションとして加えると指定したアクションのみ

ルーティングを自動生成する。

 

例: indexアクションのみを設定したことになる 

Rails.application.routes.draw do

  resources :tweets, only: :index

end

 

except...resourcesにオプションとして加えると不要なアクションを指定してくれる。

 

例: destroyアクションを除いたルーティングを設定したことになる

Rails.application.routes.draw do

  resources :tweets, except: :destroy

end

 

 

ストロングパラメーター

指定したキーを持つパラメーターのみを受け取れるよう制限するもの。

ストロングパラメーターはプライベートメソッドとして定義する。

 

例:

private

def post_params

  params.permit( :受け取りたいキー名)

end

 

パラメーター

...リクエストに含まれて外部から渡されるデータ。

URLに含めるパラメーターやフォームから送信されるパラメーターがある。

 

プライベートメソッド

...クラス外から呼び出すことのできないメソッド。

繰り返し使用するメソッドもprivate以下に集約できる。

 

 

自己紹介

兵庫県・神戸市出身。

2020年6月〜TECH::CAMPにてプログラミング学習を開始しました。

 

趣味はゲーム、お絵描き、映画、ライブなど...

TDRが大好きで、特にグーフィーを愛しています!

 

エンジニアを志すきっかけになったのは2018年9月の祖母の死でした。

それまで早朝から夜中まで忙しく働いていたのですが、

仕事を言い訳に、生まれた時から一緒に暮らしていた祖母が入院しても

まともに会いに行けず、そんな状況の中で

ある日突然お別れをすることになってしまったのです。

後悔と悲しみに暮れる毎日の中で「私の人生このままじゃダメだ!」

と思い立ち、それがエンジニアを目指すひとつのきっかけとなりました。

 

 

 

 

自分にも他人にも誇れる技術を習得したい!

 

もっと自由な生き方を選択していける人生を生きていきたい!

 

きっと必ず今の自分を変えてやる!

 

 

そんな思いで初心者エンジニアは今日も奮闘中です!