niki12260714の日記

フリーランスのITエンジニアの呟き。

railsで二つのセレクトボックスを連動させる

都道府県のセレクトボックス選ぶと、隣にある市町村のセレクトボックスの中身が変わる。そういう奴をrailsで作る方法です。ネットに沢山情報がありますが、自分が分かりやすかった方法がこちら。 【プログラムの動き】1.セレクトボックスにonchangeイベント…

AWS Cloud9でpumaを再起動

参考にしたのはこちら。 qiita.com ターミナルで「ps ax」を打つと、これが出てきました。 AWSの場合、「puma x.xx.xx~」を殺せばよい模様。「kill -9 6109」でpumaが終了するので、「rails s -b $IP -p $PORT」を打てば再起動する。 ※「server.pid」ファイ…

【調査中】railsでleft_joinsするモデルに対して条件を追加する方法

こちらと同じことをしたくて調べています。 teratail.com 自分の場合、まさに外部結合する方のテーブルに条件を追加するSQLを発行したいのです。 SELECT A.id, B.idFROM ALEFT OUTER JOIN B ON A.id = B.a_id AND B.col = (動的な値)WHERE A.col = (なんかの…

railsで親子モデルのそれぞれに条件設定してn+1問題を解決する方法

親子のモデルで結合する時、joinsかincludesを使うわけですが、取得結果表示で、「子供のループで回したい」となると、joinsだとn+1問題が発生します。なので、includesをしたいのですが、includesは「親に対してSQL実行」→「親の結果をもとに子のSQLを実行…

railsで親子孫ひ孫までをincludesする

自分メモ。沢山ある関連モデルをincludesする場合。 親.where(条件文).all.includes(子: [孫: :ひ孫])

子モデルで条件を設定し、includesする場合

今でも鮮明に覚えているんですが、初めて先輩に、業務で組んだコードをレビューしてもらった時。「なんでSelectのループの中で、またSQL発行しているの?」はい、効率とかリソースとか考えられない超初心者でした。それ以降、「SQL発行は極力1回で行う、ルー…

railsでAjax通信を行い、通信結果を元ページの指定位置にレンダリングする

色々方法はあるみたいですが、自分が理解しやすかった方法。 1.ViewにAjax通信するアクションと、通信結果を受ける個所を記述 この例だと、「groupsコントローラーのsearch_memberアクション」がAjax通信行うことになります。この時に「remote: true」を指定…

親子孫の3つのテーブルを関連付けてデータ取得

A,B,Cというテーブルがあって、それぞれ親→子→孫という関係とします。 Aモデル:has_many:bs(複数形) Bモデル:belongs_to:a(単数形)has_many:cs(複数形) Cモデル:belongs_to:b(単数形) ここで、cモデルにあるカラムをwhere句にして、Aモデルの値を…

親子関係にあるテーブルに一度にデータを保存する

親テーブルにデータを作ったら、そのidを使って子テーブルにもデータを入れたい場合がありますよね。というのをやってくれるのが、buildです。 まず最初に、各モデルに親子関係を記述します。※Aの子供がB、Bの子供がCとする Aモデル:has_many:bs(複数形) …

AWS Cloud9でPostgreSQLに対しrake db:migrateが失敗する

ここら辺、自動でやってくれるDBとかで開発していたんで、知らないから躓いたところでした。前回の記事の続きです。 niki12260714.hatenablog.com ここの記事で、「confファイルが見つからなかった」とありますが、ここが問題でした。 migrateのファイルを作…

AWS Cloud9でPostgreSQLを使ったrailsプロジェクトを立ち上げる

画面設計、DB設計に着手したんで、本格的に開発環境を整えていきます。ということで、sqliteではなく、PostgreSQLを使って開発することになりましたので、その設定。例によって、自分メモです。参考にしたのはこちら。 qiita.com お手本通り、コマンドを打っ…

Gemfile編集後のbundle updateでコンフリクト発生時の対応

Gemfileに新しいgemを追加して、「bundle update」を叩くとエラーが出ました。 『Bundler could not find compatible versions for gem "actionview"』 ググってみると、バージョンが競合してますよ、ってことらしい。「gem list」で今入っているgemのリスト…

AWS Cloud9で編集してからgithubへpushするまでのコマンド

gitを使い慣れていない自分のコマンドメモとして。 1.ブランチを切る※AWS Cloud9のbashで、今自分がいるブランチがmasterブランチであることを確認してから実施「git checkout -b "ブランチ名"」→実行すると指定したブランチ名に切り替わる ※この後にコード…

AWS Cloud9でgithubからcloneしたRuby on Railsを動かす

当然っていえば当然なんですが、cloneしてきただけだと動かないわけで。こちらを参考にして、動作させるべく四苦八苦。 tyoshikawa1106.hatenablog.com こちらにある通り、「gem install bundler」を実施。こっちは成功。なので、次に「bundle install 」を…

AWS Cloud9にgithubからcloneしてくる

これで合っているかいまいちわからんのですが、githubにある自分のレポジトリを、AWS Cloud9にクローンしてきました。参考にしたにはこちら。 docs.aws.amazon.com Cloud9にgit環境の導入のため、以下のコマンドをそれぞれ叩きます。「sudo yum -y update」…

AWS Cloud9でRuby on Rails開発環境を構築する(とりあえず完成)

どうにもCodeStarからCloud9が作れないので、これはCloud9でrubyインストールした方が早いな、と判断。※きっと英語がすらすら読めればエラー解読できると思うんですが、出来なかった…… 多分、なんかキーが足りてないor権限設定をしてないのが問題という気が…

AWS Cloud9でRuby on Rails開発環境を構築する(途中経過)

今週からプログラム塾に通っています。通うって言っても、オンライン学習ですけれど、侍エンジニア塾さんのお世話になっています。 早速、コーチの方と面談をし、作るアプリについて概要をお話しました。そちらはまた別途。そこで宿題が出されまして、「Amaz…

Visual Studio CodeでGo言語のHello World!

初心者過ぎて誰も書かないと思うんで、自分メモ。Visual Studio Codeでgo言語のプログラムファイルを作成して動かす方法。 開発環境を構築したら、任意のフォルダを作って、Visual Studio Codeのエクスプローラーで開きます。そしてファイルの追加で、「(フ…

Go言語メモ

ちょっとGo言語を触ってみようと思って、メモを取っています。※開発環境の設定って最初の1回しかやらないからほぼほぼ覚えていなくて、後で困ることもあるんで、メモ取りです。参考にしたのはこちら。 qiita.com 既にVisual Studio Codeは入っているし、git…

Githubを使ってみました

最後の部分がいつまでもできなくて(SQLは思い浮かぶんですが、rails的に実装するのがよく分からず……)、でもこのままぐずぐずするのもなぁ、ということで、とりあえず出来ている部分のコードだけGithubに上げてみました。 github.com セキュリティ警告出て…

Ruby学習23日目:Betweenの書き方

今月はイベント三昧でこっちにあんま手を付けられなかった……。それが分かっているから先月中になんとかしたかったんですが、まぁ仕方ない。 さて今日からブラックリストの編集。ブラックリストに載る人は「引き取りに来ていない人」、あるいは「引き取り時に…

Ruby学習22日目:#{table_name}の利用

二つのテーブルをjoinさせて値を取得してくる場合、where句でidカラムを指定すると、「どっちのテーブルのidカラムなんだよ(怒)」と怒られます。なので、前に調べたところ、「arel_table」を使うのが良いみたいだったのですが、今日さらに調べたら、「これ…

Ruby学習21日目:gemパッケージのインストールと利用

イベントが終わったので、再びrailsと格闘。次に実現するのは、取り置きしたアイテムを引き取るために必要なQRコードの表示です。QRコードをいわゆる引き取り証明のように使おうというわけです。予約者はQRコードを見せるだけ、サークル側はQRコードを読み取…

Ruby学習20日目:トランザクション、フラッシュ、merge

イベントに向けて原稿書いたり、アニメ化追っかけていたりで進捗悪いんですけど、予約を取るところまでできたので。 【やりたいこと】・アイテム製作者のページにアクセスすると、本日以降にイベントがあるアイテムの中で、取り置き可能なアイテムが表示され…

Ruby学習19日目:url_forで現在のURL取得

意外に詰まったのと、多分もっと簡単な書き方があると思うので、いつか直したいメモとして残しておきます。 取り置き依頼申請画面のURLは「http://xxxx/request/(アイテム作成者を示すパラメータ)/(アイテムのID)」とします。理由は、アイテムIDは連番に…

Ruby学習18日目:scope定義

昨日関連テーブルを定義しましたので、そうするとデータがどうやって取ってくるのか、というお勉強。 ・取り置き依頼画面は、URLで渡されるパラメータにより一人のユーザーに定められ、そのユーザーが持つアイテムが表示される。⇒usersテーブルはitemsテーブ…

Ruby学習17日目:リクエスト情報取得、複数テーブルの処理

今日は外部に出す、取り置き依頼画面を作ります。構成としては、「〇〇さん専用のアイテム一覧画面」→「取り置きしたいアイテム画面」→「取り置き依頼完了画面(QRコード表示)」となります。最初にアクセスするアイテム一覧画面は、URLに、誰のアイテム画面…

Ruby学習16日目:画像アップロードと画像表示

やりたいことを整理すると、 ・アイテムの商品画像をアップロード。→場所は/public/imgの下。この時に画像のファイル名を【ユーザーID + アップロード日時】に変更→アップロードできるのは拡張子が「.jpg」「.gif」「.png」のみ、容量は1M以下→DBに保存する…

Ruby学習15日目:ファイルアップロード

すみません、終わってないです…… 【やりたいこと】・アイテム画像をアップロードする・画像ファイルは拡張子が「.jpgか.gifか.png」であり、かつ1M以下であること・画像ファイルはpublicフォルダの下にあるimgフォルダに配置する・保存時にはユーザIDと時刻…

Ruby学習14日目:マイグレーション、form_tag、共通レイアウト、共通モジュール

今日は途中だらだらしつつも1日、rails学習してました。Webアプリケーション開発でほぼ必須と思われる個所は手を付けられた感じ。 【マイグレーション】・開発中にDBにカラム追加とか削除とかよくある話なので、マイグレーションはその変更をおこなうもの。…