2017-09-01 到達点メモ
前置き
Q1.これは何?
A1.今日やった作業メモです。Evernoteに書いたやつの転載です。割とそのまま載せるのでパッと見何やっているかわからないと思います。
Q2.どれくらい正確なの?
A2.とりあえず動けばいいの精神なのであまり参考にしないほうがいいと思います。
Q3.何で書くことにしたの?
A3.理由は三つ。一つ目は、何処かで見たブログで下手でも余り正確でなくてもいいから公開したほうがいいという風な意見を見て感心したので真似しようと思ったから。
二つ目は、やっている感を外部にわかりやすく示すため。三つ目は、Evernoteが重くて使い物にならない時がある為です。
------------------------------------------------------------------------------------
状況:自分用にソフトウェア開発のドキュメントをサポートするWebサービスを作っている。
何でRailsで作っているかというと今の手持ちの中で一番学習コストが低かったのが
Railsだったため。なお、公開の予定はないです。
Rails5.0.3の話です。
本当にRailsのやり方をど忘れしている
その上なんかいつの間にか知らない機能があるし……
正直そこは主題じゃないので、置いておくとして
has_manyとbelong_toでつながれたモデルは以下のような形で保存できるようになります
要は、has_manyにあたる親のテーブルを、子のテーブルにつないで(その際に、複数形にすることを忘れない事)
buildをかけると新規作成したのと同じような状態になり
その後で親のテーブルをsaveで保存すると
このテーブルも保存したのと同じ状態になります。
@project = Project.new(project_params)
worker = @project.workers.build
worker.name = @project.developer
worker.name = "開発者" if @project.developer.blank?
worker.is_project_member = true
screen = @project.screens.build
screen.name = "その他"
respond_to do |format|
if @project.save
format.html { redirect_to @project, notice: 'Project was successfully created.' }
format.json { render :show, status: :created, location: @project }
else
format.html { render :new }
format.json { render json: @project.errors, status: :unprocessable_entity }
end
end
こんなことも忘れてたんだよなぁ(白目)
どこでも値を保持できるようにしたかったので
最初はsessionを使おうかと思ったが、
本当にuser_idぐらいしか使えないみたいなので
素直にグローバル変数を使う事に。
グローバル変数でIDが構造が同じなのに
一部の場所だけエラーの表示のパラメーターでが
本来代入されているパラメーターがnilってなっているときは
変数が間違っていないか疑おう
じゃないと一人でオカシイオカシイとわめく羽目になります。
何故か値が更新されないのでグローバル変数を使っていたせいかと思っていたが全然違った。
×間違い
@@project_id = $project_id
def index
@project_id = @@project_id
@screens = Screen.where(project_id: @@project_id)
end
〇正しい
def index
@@project_id = $project_id
@project_id = @@project_id
@screens = Screen.where(project_id: @@project_id)
end
メソッド外で宣言すると、一回だけしか呼ばれないみたいで
その為に値が更新されなかったようである。
いや、これも当たり前なはずなんですけど(最初の頃間違いの方法で初期化処理やってたし)
普通頭からすっぽ抜けてたんですよね……
一度、真面目にRailsチュートリアルをやるべきな気がする。
Railsを極めたいわけじゃないんだけど、結局急げば回れのような気がする……
0 コメント:
コメントを投稿