Rails個人メモ
ログ出力
とりこれ
code:rb
def update
task = Task.find(params:id) ...
code:log
パラメータ: {
"name"=>"一覧表示機能の実装(更新)", "description"=>"一覧アクションと一覧画面を実装する。\r\nそして詳細、編集、削除のリンクを加える。\r\nlog test\r\n"
}
ぱらむ:
{"utf8"=>"✓", "_method"=>"patch", "authenticity_token"=>"...=", "task"=><ActionController::Parameters {"name"=>"一覧表示機能の実装(更新)", "description"=>"一覧アクションと一覧画面を実装する。\r\nそして詳細、編集、削除のリンクを加える。\r\nlog test\r\n"} permitted: false>, "commit"=>"更新する", "controller"=>"tasks", "action"=>"update", "id"=>"1"
}
updateとかの画面遷移のみのメソッドのパラメータを見たいならこんな感じ。
putsで出す
puts "ログテスト"とかでもrails sのログに出せる。
オブジェクトの要素をを出したい場合
code:rb
@tasks = Task::all
puts @tasks.inspect
inspect
オブジェクトの値を文字列として出せる。
code:rb
irb(main):019:0> puts @tasks
Task Load (0.4ms) SELECT "tasks".* FROM "tasks"
...
=> nil
irb(main):020:0> puts @tasks.inspect
という感じ
Rspec内での情報をログに出したい場合
code:rb
before do
visit task_path(task_a)
end
こんな感じで書けば良い。
ルーティング
test.com/rails/info/routesにアクセスすれば見れる。
link_to関連
= link_to "新規登録", new_task_path, class: 'btn btn-primary'
new_task_path
URLヘルパメソッド
この書き方をすると、task/newというURLに飛ばしてくれる
href="task/new"と似た意味
tasks_pathと書くとtasksに飛ばす
form関連
form_with
railsのmodelを対応づけて処理を作れる
code:rb
= form_with model: task, local: true do |f|
.form-group
# text_fieldのラベル
= f.label :name
# taskのnameカラムに割り当てる
= f.text_field :name, class: 'form-control', id: 'task_name'
.form-group
= f.label :description
= f.text_area :description, rows: 5, class: 'form-control', id: 'task_description'
= f.submit nil, class: 'btn btn-primary'
= f.submit nil, class: 'btn btn-primary'について
渡したmodelの状態によって、作成するとか更新するとか文面をrailsが変えてくれる
tasksが空なら新規作成だな、とか
検証(validation)
modelに書くことが多い。
presence: 必須項目が入っているかのチェック
画像を格納できるようにするまでの流れ
今回Active Storageは使わない。
usersにiconのパスを格納するマイグレーションを作る。
If the migration name is of the form "AddColumnToTable" or "RemoveColumnFromTable"
Adカラム名Toテーブル名っていう命名規則にしろよということ
code:rails
bin/rails generate migration AddIconToUsers
フォームを作る
.form-groupとかの仕組み
code:slim
// f.labelにとf.text_fieldとかf.file_fieldに :カラム名 と指定する
.form-group
= f.label :icon
= f.file_field :image, class: 'form-control'
画面に表示されるラベル名
config/locales/ja.ymlとかに記載した内容の通りになる
rails sなどローカルサーバの場合であればここに書き込んだら即時反映される。
画像格納用のフォルダを作る
taskreaf/publicに基本格納されるので、構造を分けたいならこの辺に作る
public/user_iconsとした。
この状態で画像をアップしてパラメータを見てみる
code:sh
Started PATCH "/admin/users/5" for ::1 at 2024-03-31 00:23:24 +0900
Processing by Admin::UsersController#update as HTML
Parameters: {"utf8"=>"✓", "authenticity_token"=>"...Tb0C2OjQy8rA==",
"user"=>{
"name"=>"railsくん",
"email"=>"railskun@test.com",
"icon"=>#<ActionDispatch::Http::UploadedFile:0x00007ff478789c30 @tempfile=#<Tempfile:/var/folders/wq/0wp2s5w17jg8psjg93v58ldr0000gn/T/RackMultipart20240331-59504-1jdh2kf.jpg>, @original_filename="20210226_d1a697.jpg", @content_type="image/jpeg", @headers="Content-Disposition: form-data; name=\"usericon\"; filename=\"20210226_d1a697.jpg\"\r\nContent-Type: image/jpeg\r\n">, "admin"=>"0",
"commit"=>"登録する",
"id"=>"5"
}
どうやら入ってはいるという感じ
https://scrapbox.io/files/6608301ddc976e002741ecd7.png
code:rails c
irb(main):006:0> user = User.find(5)
irb(main):007:0> user.icon
=> "#<ActionDispatch::Http::UploadedFile:0x00007ff478789c30>"
根本的に違うようなので調べる。