Rails関連のことを調べてみた2019年11月29日

Rails関連のことを調べてみた2019年11月29日
目次

カラムを追加・削除・編集する方法

#カラムを追加・削除・編集したい時ってあるよね〜
テーブルを作ったはいいものの後々で必要なカラムが出てくることありますよね?
カラムの洗い出しが甘いって?そのとおり!

ではいってみよう!!

#カラムの追加
ターミナルでマイグレーションファイルを作成

`rails g migration Addカラム名Toテーブル名 カラム名:型`

“`:ターミナル

rails g migration AddTitleToTweets title:string


rails g migration AddDetialsToTweets title:string date:date
#複数選択も可能
#Detailsの部分は何でもOK
“`

“`ruby:マイグレーションファイル

class AddTitleToTweets < ActiveRecord::Migration[5.2] def change add_column :tweets, :title, :string end end ② class AddTitleToTweets < A

元記事を表示

カラムにインデックスを貼ろう

#インデックスとは
カラムにインデックスを設定することで、`データ検索を高速化`させることができます!

#使い方
マイグレーションファイルを作成

“`:ターミナル
rails g migration AddIndexToTweets
“`

マイグレーションファイルに、
`add_index :テーブル名, :カラム名`を追記

“`ruby:マイグレーションファイル
class AddIndexToTweets < ActiveRecord::Migration[5.2] def change add_index :tweets, :text end end ```
複数ver.

“`ruby:マイグレーションファイル
class AddIndexToTweets < ActiveRecord::Migration[5.2] def change add_index :tweets, [:text, :title] end end ```
#デメリットも

①データを保存・更新する速度が遅くな

元記事を表示

カラムに制約をかけよう

###カラムに制約をかけ、予期せぬデータが保存されるのを防ごう

|制約|意味|
|:-:|:-:|
| NOT NULL制約| 空データはダメよ|
| 一意性制約 | 他と被るのはダメよ|
| 外部キー制約 |外部キーに対応するテーブルのレコードがないとダメよ|

#NOT NULL制約

空データは禁止
カラムの後ろに`null: false`を追記

“`ruby:マイグレーションファイル
class CreateTweets < ActiveRecord::Migration[5.2] def change create_table :tweets do |t| t.text :text, null: false t.timestamps end end end ``` ```:ターミナル rails db:migrate ``` これでtextに値がないツイートは作れないようになりました。
#一意性制約

他と同じデータは禁止
`add_index :テーブル名, :カラム名, un

元記事を表示

Railsの基礎の基礎 DB,ActiveRecord,migration ,MVC,HTTP,CRUD

Railsを学ぶ際の基礎に当たるところをここに記載しておきます。
随時更新予定(2019年11月29日)

##DBを操作する言語:SQL
例:Mysql,Sqlite

**CRUD**
Create/Read/Update/Delete

##ActiveRecordとは
Databaseの処理をRubyから簡単に行うための仕組み
SQLをうまく扱うための仕組み ModelとDBのことをさす(厳密には違う)

例:@contacts = Contanct.all

##migrationとは
DBの変更をテキストで残すことができる
それによりgitで他の人と変更を共有することができる

##MVCとは
Model
View
Controller

##実際の流れ
1.controllerが最初にインターネットの通信を判断する役割。どのモデルに処理を依頼するか考える
2.Modelはデータベースからデータをとる、もしくは入れる。そして再びコントローラに戻る。
3.Modelのデータが取れたらそれを表示する。それを表示するViewをコントローラーが考える。

##主なHTTPメソッ

元記事を表示

db/seeds.rbの中身を変更したらrails db:seedできない。そんなときにありがちな原因

# 何が起こったか

`db/seeds.rb`の中身を変更したら、`rails db:seed`が失敗するようになりました。

“`
# rails db:seed
rails aborted!
SyntaxError: /var/www/sample_app/db/seeds.rb:5: syntax error, unexpected tIDENTIFIER, expecting ‘)’
admin: true)
^~~~~
/usr/local/bundle/gems/activesupport-5.1.6/lib/active_support/dependencies.rb:286:in `load’
…略
“`

この後やたら長いスタックトレースが流れてきて面食らいます。

# 原因

原因は、`db/seeds.rb`で、単に項目区切りのカンマを入れ忘れていたことでした。`db/seeds.rb`を以下のように修正します。

“`diff:db/seeds.rb
User.create(name:

元記事を表示

【Rails】基本的なログイン機構【Rails Tutorial 8章まとめ】

##ログイン機能
HTTPリクエスト(POST、GETなど)は送信後、リクエストを送信したという記録が残らないため、情報を保存することができない。
ログイン機能を実装するために、sessionメソッドと専用のコントローラを用意する。

##Sessionsコントローラ
Sessionsコントローラを作成する。

“`
$ rails generate controller Sessions new
“`
newアクションとビューはログイン画面で使用する。

SessionsコントローラにはUsersコントローラと同様、RESTfulなルーティングを設定する。
resourcesメソッドを使ってもよいが、editやshowなどのアクションは不要なので、必要なルーティングだけを手動で設定する。

“`config/routes.rb
Rails.application.routes.draw do
.
.
.
get ‘/login’, to: ‘sessions#new’
post ‘/login’, to: ‘sessions#create’

元記事を表示

【Bootstrap】jQueryライブラリの読み込み【Rails Tutorial 8章まとめ】

##BootstrapのjQueryライブラリ
Bootstrapに含まれるCSSのdropdownクラスやdropdown-menuといったドロップダウン機能は、Bootstrapのjavascript(jQuery)ライブラリを読み込まなければ使えない。

application.jsにBootstrapのJavaScriptライブラリを追加する。

“`app/assets/javascripts/application.js
//= require rails-ujs
//= require jquery
//= require bootstrap
//= require turbolinks
//= require_tree .
“`

元記事を表示

#Rails ( #Ruby + ActiveSupport ) + Time.use_zone + travel_to で現地時刻=日本時刻=JSTを固定して UTC 変換結果を見て遊ぶ例

– タイムゾーンの9時間の扱いを一生かかっても覚えられる気がしない
– 足し算と引き算を間違える確率が65%
– Rubyで遊んでいたらだんだん分かってきた気がするけれど
– タイムゾーンに慣れ親しむだけで1週間かかって、3日で忘れる気がした

“`rb
require ‘active_support/core_ext’

# 日本時間の年始の時間
jst_beggining_of_year = Time.use_zone(‘Tokyo’) { Time.local(2020, 01, 01, 00, 00, 00) }

# travel するために必要
require ‘active_support/testing/time_helpers’
include ActiveSupport::Testing::TimeHelpers

# 日本時間の年始に時間を固定する
travel_to jst_beggining_of_year

# 今日の日付は 2020-01-01
Date.current
# => Wed, 01 Jan 2020

# 現在時刻は 2020-01-01

元記事を表示

#Ruby と #Rails の Time や Time.zone の扱いががマジで分からないし混沌としてるのでちょっとだけ整理したい。

# Try at

この時間に試しました

– JST 2019-11-28 hour 19
– UTC 2019-11-28 hour 10

# For Ruby

`require ‘active_support/core_ext’`

# No Time zone setting

タイムゾーン指定がないとメソッドが使えなかったり

“`rb
Time.zone
# nil

Time.zone.now
# NoMethodError: undefined method `now’ for nil:NilClass
“`

# Timezone指定

Time.zone は ActiveSupportのインスタンスになる
タイムゾーンを切り替えるには `Time.zone=` メソッドを実行

Railsであればapplication.rb の configに書くだろうが

タイムゾーン指定自体は `Tokyo` でも `Asia/Tokyo` でも同じようにはからってくれるっぽい
ちなみに `Time.zone = ‘JST’` じゃ動かないとか信じられるかい

“`

元記事を表示

Railsでのjoinsの結果のidについて

Railsでテーブル結合してデータを取得した時、idを参照元の主キーにしたいのに参照先の主キーになってしまっていた。
結論として

“`
Hoge.joins(:fuga).where(fuga_name:”hoge”).select(“fuga.*,hoge.*”)
“`
このようにselectで最後に指定したテーブルの主キーが結合したデータの主キーとなる。

元記事を表示

carrierwaveでmultiple: trueは相性が悪い?

# はじめに
Railsを使って某フリマアプリのクローンを作成する際、一つの商品に対して複数の写真投稿が可能な場合の処理に手こずったため、何かの参考になればと思い投稿します。

# 今回行ったこと
単純なアプリケーションを作り、流れなどを理解しやすくしfields_forを用いた形でのパラメーターの動きやcarriewaveで複数画像をアップロードする際の必要な記述に気を配りながら検証を行った。

# 環境
Rails 5.0.7.2
Ruby 2.5.1

# アプリケーションの設計
### テーブル
今回は以下のような単純な設計のアプリケーションを作成しました。
一つのツイートが複数の写真を持つことができるようになっています。

|tweet|
|:—————–:|
|content|

|image|
|:—————–:|
|url|
|tweet_id|
### モデルファイル
親モデルに当たるtweetモデルには`accepts_nested_attributes_for`の記述をします。これはtweetモデルと同時にimageモデ

元記事を表示

エンジニアにオススメしたいyoutuber

# Able Programming
機械学習に必要なpythonのライブラリや、機械学習の手法について解説しています。初心者でも機械学習に触れられるようになっています。
[Able Programming](https://www.youtube.com/channel/UCh5M2YUAPW7HnpfTUv7XHmA/videos)
スクリーンショット 2019-11-29 1.14.59.png

# シリエン戦隊JUN TV

シリコンバレーの現役エンジニアで、シリコンバレーで働いているエンジニアならではの情報を載せています。
将来シリコンバレーで働きたい人や起業したい人にオススメです。
[シリエン戦隊JUN TV](https://www.youtube.com/channel/UCqRPKFts1P

元記事を表示

email_fieldの入力フォームに初期値を反映させる方法

#bootstrapを使用しながらemail_fieldの入力フォームに初期値を反映させる方法。
ポートフォリオを採用側に見てもらう時少しでも手間を省くため、ワンクリックで済むようにと初期値設定を考えました。
text_fieldは大量に検索ヒットしたけどemail_fieldとpassword_fieldは出てこなくて苦戦したので、自分用メモとして。

“`ruby:new.html.erb
<%= form_with(url: login_path, scope: :session, local: true) do |f| %>

<%= f.label :email, 'メールアドレス' %>
<%= f.email_field :email, class: 'form-control', placeholder: 'hoge@gmail.com' %>
<%= f

元記事を表示

#Ruby で #Rails と同じ Time.zone.now を使う

– activesupportをinstall & require する
– Time.zone を指定する
– あとは Rails と同じようにする

“`
gem install activesupport
“`

“`rb
require ‘active_support/core_ext’
# => true

Time.zone
# => nil

Time.zone = ‘Tokyo’
# => “Tokyo”

Time.zone
# => #, @utc_offset=nil>

Time.zone.now
# => Thu, 28 Nov 2019 17:41:36 JST +09:00
“`

# Original by Github issue

https://github.com/YumaInaura/YumaInaura/issues/2773

元記事を表示

#Ruby / #Rails で日付を UTC あるいは local時刻 = JSTなどで time に変換するにはするには引数を指定せよ

# Rails

“`rb
Date.parse(‘2020-01-01’).to_time(:utc)
# => 2020-01-01 00:00:00 UTC

Date.parse(‘2020-01-01’).to_time(:local)
# => 2020-01-01 00:00:00 +0900

“`

# Ruby の場合はgem installが必要

“`
gem install activesupport
“`

“`
require ‘active_support/date’
require ‘active_support/core_ext’
“`

# Original by Github issue

https://github.com/YumaInaura/YumaInaura/issues/2772

元記事を表示

Rails+Vueのユーザー登録実装でムカついたのでメモ!!!

## やったこと
deviseなどのgemを使わずユーザー登録機能をrailsとvueで実装

## ハマったこと
ユーザー登録フォームに入力してPOSTした時、:userの中にpasswordとpassword_confirmationの値が入らず(ネストせず)かなり苦戦。

具体的にはこんな感じ。

### 理想形
“`:コンソール
Parameters: {“user”=>{“name”=>”hogehoge”, “email”=>”fugafuga@test.com”, “password”=>”[FILTERED]”, “password_confirmation”=>”[FILTERED]”}}
“`

### NG形
“`
Parameters: {“name”=>””, “email”=>””, “password”=>”[FILTERED]”, “password_confirmation”=>”[FILTERED]”, “user”=>{“name”=>””, “email”=>””}}
“`

**passwordとpassword_confirmatio

元記事を表示

#Rails にタイムゾーンが設定されていない場合に Time.use_zone とで一時的にタイムゾーン指定を有効にする : UTC VS JST

日本時間 16:46 に実行した例

# UTC

“`rb

Time.zone.parse(‘2020-01-01 00:00’)
# => Wed, 01 Jan 2020 00:00:00 UTC +00:00
Time.current
# => Thu, 28 Nov 2019 07:46:28 UTC +00:00
Time.zone.now
# => Thu, 28 Nov 2019 07:46:28 UTC +00:00
“`

# JST

“`rb
Time.use_zone(“Tokyo”) { Time.zone.parse(‘2020-01-01 00:00’) }
# => Wed, 01 Jan 2020 00:00:00 JST +09:00
Time.use_zone(“Tokyo”) { Time.current }
# => Thu, 28 Nov 2019 16:46:28 JST +09:00
Time.use_zone(“Tokyo”) { Time.zone.now }
# => Thu, 28 Nov 2019 16:46:28 J

元記事を表示

Railsの非同期通信でDELETEを行う

# はじめに
自作アプリ「[CheckMe!](https://check-me-share.herokuapp.com)」はユーザビリティ向上を目指してDBとのやりとりに非同期通信を多く使っています。
CRUDを非同期でやっていますが、Deleteについて結構つまづくポイントがあったので備忘録を兼ねてまとめておきます。
この記事が同じことをやりたい人の手助けになれば幸いです。

# 条件
削除対象のidが含まれたリンク(クラスに’delete_link’を持つ)をクリックした時にイベントを中止して
idのアイテムを削除する非同期通信をする。

# 実装

“`javascript
$(‘.delete_link’).on(‘click’, function (e) {

// stopPropagationがないとHTMLとJSONの
// リクエストが同時に送られてしまう
e.preventDefault();
e.stopPropagation();

//リンクに含まれるURLを取得する
var url = $(this).at

元記事を表示

gmaps4railsのマップタイプを設定する

## はじめに
Google Map APIを利用したアプリ開発をしています。
その時に、マップの表示のデフォルトを航空写真にしたかったので実装してみました。
マップの表示の種類のことをマップタイプと呼ぶそうです。

## コード
このようになりました。

“`

“`

## 参考
参考にしたのはこちら

gmap4railsの設定の変更

元記事を表示

cloud9って何なの?

#cloud9の使い方
###1.environmentはパソコンのローカル環境のこと
 以下の画像のPythonとかpracticeがenvironmentと呼ばれていて、environmentの一つ一つが仮想的な環境になっている。パソコン一台を仮想空間に持っているみたいなイメージ。environmentを4つ以上作ると有料なので注意してください!

![スクリーンショット (2).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/516894/c65f242d-6c62-31e0-a383-32fb3ee43510.png)

 environmentを起動(OPEN IDEを押す)する度にEC2と呼ばれているAWSのサーバーのインスタンス(仮想サーバーの一部)が生成されて仮想サーバーを使うことが出来ます。逆にログアウトするとサーバーは返却される。environmentを使うときだけサーバーを借りて、使わないときは返却するというイメージ。大規模開発とかでは使う分だけお金を払うのでお得にサーバを利用でき

元記事を表示

OTHERカテゴリの最新記事