BNBのプログラミング勉強記録

ガチのプログラミング初心者が駆け上がっていくブログ

Progate修了以降に覚えたRailsやRubyのTips

何これ?

俺用のメモ。Progateをやり終えてから学んだrails,ruby絡みのことを今後ここに追記する。新しくrubyのメソッドとかを覚える度にをれを一つの記事にするとネット上のノイズになりそうなので、この記事にまとめることにする。ただ、詳細を記載する必要がある場合は、単独で記事を作る。いいだろ?

ターミナルに書くやつ

パーミッション設定の確認

これと↓のやつは、そもそも、投稿画像をFileでなんとかしようとしていた際に調べていたこと。Progateが悪い(多分違う)。

ls -al

パーミッション変更

chmod 数字3桁 ファイル(ディレクトリ)名

テーブルに列追加(migrationに自動で記載される)

rails g migration AddRetsunonamaeToPosts retsunonamae:katanonamae

scaffold

rails g scaffold Post hoge:string hoge:string

herokuの環境変数設定

heroku config:set RAILS_MASTER_KEY=123

herokuの環境変数設定その2

heroku config:set RAILS_MASTER_KEY=`cat config/master.key`

herokuの環境変数を解除

$ heroku config:unset RAILS_MASTER_KEY

rails s停止

ps aux
pumaを探す
数字を覚える
kill 数字

モデルに書くやつ

activestorage+a3で画像一つだけ投稿

has_one_attached :image

コントローラーかビューに書くやつ

以下、コントローラー、ビューいずれにも書くかもしれないやつ。

0埋め

format("%010d", 123)
#0000000123

ファイル削除

2023/05/26時点ではOperation not permitted @ apply2files - public/post_images/ って出るけど。なめとんか、と言いつつ対処法ググり中。なかなか出てこねえ。

2023/06/02追記
これも、そもそもProgateが悪い。binfileの存在しか教えなかったから、投稿された画像をFileでなんとかしようとしちゃうじゃん。だいたい、railsだったらactivestorageとs3を使うのが普通なんだから、それを直接教えて欲しかった。まあ、こういうのを調べるのも含めて勉強なんだろうけど、なんか腑に落ちない。

File.delete("パス")

require,permitメソッド

以下、引用。使ってねえけど。そのうち使う。

もし悪意のある利用者が入力フォームを追加して投稿した場合、受け取るパラメータも変わってしまいます。(中略)Userモデルのname, ageカラムのみを受け取る場合は、以下のように書きます。createメソッド、updateメソッドで共通的に使用するため、user_paramsのように別のメソッドに切り出すのが一般的です。
https://magazine.techacademy.jp/magazine/22078

def user_params
  params.require(:user).permit(:name, :age)
end

whereである数字からある数字まで拾う

@post=Post2.where(post_id:number_from..recent_number)

最後にcreateされた行

Post2.last

画像があったら(activestorage+s3で)

if @post.image.attached?

画像消すし行も消す

@post.image.purge && @post.destroy

前見ていた所にリダイレクト

redirect_to request.referer

タグ列に特定のタグが含まれる行を選択

@post=Post2.where("tag LIKE ?","%#{@tag}%")

小数点のある状態にして小数点以下切り上げ

to_fを使わないと切り上げできなかった。マジで罠過ぎる。というか、俺の勉強不足。railsチュートリアルとかの必要性を感じる。(読みたいが2023/06/02現在、アプリ作りた過ぎて後回し状態。いいのか?)

@pages=(recent_number.to_f/10).ceil

forの書き方

for i in 1..@times

ビューに書くやつ

font awsomeのやつ

Progateで習ったのと違うぞ!2023/06/02現在、ユーザ登録せんと駄目。

<script src="https://kit.fontawesome.com/ユーザ登録したら発行される文字列.js" crossorigin="anonymous"></script>

form_tagの別の書き方

なんか、form_tag自体が推奨されてないみたいだぞ。form_forとこれと併せて、form_withに統合されたとのこと。どうせえっちゅうんじゃ。

<%= form_tag({ :controller => 'home', :action => 'times_post' },{ :method => :post}) do %>
    <div class="submit_times">
        <input class="times" name="times" type="text" value="">
        <input class="submit_button_times" type="submit" value="post">
    </div>
<% end %>

form_with

信じられんぐらい引っかかった。ええ加減にせえ。

<%= form_with url: "/home/create", local: true  do |form| %>
  <p>name<%= form.text_field :name %></p>
  <p>image<%= form.file_field :image %></p>
  <p>comment<%= form.text_area :content %></p>
  <p>tag<%= form.text_field :tag %></p>
  <p>password<%= form.password_field :password %></p>
  <%= form.submit "post" %>
<% end %>

formでvalue設定

<%= form.text_area :content, :value=>@post.content %>

いい感じで日付表示

<%= post.created_at.strftime('%Y/%m/%d') %>
<%= link_to("#{tag}",controller: "home", action: "tag", id: tag) %> 

activestorage+s3で画像を引っ張る

<%= image_tag post.image %>

改行を反映

<%= simple_format(post.content) %>

data: { turbo_method: :post } でようやく動いた。Progateの嘘つき。Progateだと{method: "post"}って習ったけど動かんかったぞ。あとProgateだとiタグでfaを作れなかった。色々、なんだかなあ感がある。まあProgateも「後はネットで調べてください」てな姿勢ではあるんで、ある程度しゃあないのだろうな。

<%= link_to ({ controller: "home", action: "like", id: post.id}),
data: { turbo_method: :post  } do %>
    <i class="fa-sharp fa-solid fa-thumbs-up"></i>
<% end %>

配列やハッシュ

カンマ区切りの文字列を配列に変換

to_sが必要っぽい

Foo.find(1).bar.to_s.split(",")

モデルから特定のカラムだけ取り出して配列化する

foos=Foo.pluck(:bar)

配列をカンマ区切りの文字列に変換

上の続き

baz=foos.join(",")

前後の余分な空白を削除

.map(&:strip)

配列から、空を削除

.reject(&:empty?)

配列から、ハッシュに含まれたキーを削除

hash = {"foo" => true, "bar" => true}
Buz.reject { |qux| hash[qux] }

重複を削除

.uniq

新しい配列を作成(map先生)

# 各要素を2倍して新しい配列を生成
numbers = [1, 2, 3, 4, 5]
doubled_numbers = numbers.map { |num| num * 2 }
puts doubled_numbers  # 出力: [2, 4, 6, 8, 10]

# 文字列の長さを取得して新しい配列を生成
fruits = ["apple", "banana", "cherry", "date"]
lengths = fruits.map { |fruit| fruit.length }
puts lengths  # 出力: [5, 6, 6, 4]

# ブロックの戻り値がtrueの要素を選択して新しい配列を生成
numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
even_numbers = numbers.map { |num| num if num.even? }.compact
puts even_numbers  # 出力: [2, 4, 6, 8, 10]

# 配列の中で配列を作る
fruits = ["apple", "banana", "cherry", "date"]
fruits_true = fruits.map { |fruit| [fruit,true] }
puts fruits_true  # 出力: [ ["apple",true],["banana",true],["cherry",true],["date",true] ]

ハッシュ化

上の続き

p fruits_true.to_h
# 出力: {"apple"=>true,"banana"=>true,"cherry"=>true,"date"=>true}

マイグレーションファイルに書くやつ(change内)

列リネーム

rename_column :モデル名(全て小文字の複数形), :変更前のカラム名, :変更後のカラム名