何これ?
俺用のメモ。Progateをやり終えてから学んだrails,ruby絡みのことを今後ここに追記する。新しくrubyのメソッドとかを覚える度にをれを一つの記事にするとネット上のノイズになりそうなので、この記事にまとめることにする。ただ、詳細を記載する必要がある場合は、単独で記事を作る。いいだろ?
ターミナルに書くやつ
パーミッション変更
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の別の書き方
<%= link_to("#{tag}",controller: "home", action: "tag", id: tag) %>
activestorage+s3で画像を引っ張る
<%= image_tag post.image %>
改行を反映
<%= simple_format(post.content) %>
link_toとfont awsomeでいいねボタンを作る
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 :モデル名(全て小文字の複数形), :変更前のカラム名, :変更後のカラム名