bash で branch名が表示できるようにした。
以前は oh my zshを使用していたが、古いとか重いなど記事があり
今回bashで導入したのでメモ。
Mac OS X で zsh + oh-my-zsh の環境を作って一通り設定するまで - Qiita
qiita.com
導入後
Railsの会25日目[dup /インデックス/pg (0.18.4) ]
今回の範囲(続き)
インデックス
データベースの世界で、インデックス(索引)とはテーブルに格納されているデータを高速に取り出す為の仕組みです。
基本: カラムに対してインデックスをつける。
ALTER TABLE landing_pages ADD INDEX index_name(user_id)
インデックスが早い時
1. テーブル内のデータ量が多く、少量のレコードを検索する場合
2. WHERE句の条件、結合の条件、ORDER BY句の条件として頻繁に利用する
ただし全表走査が目的のテーブルであれば索引は不要
3. NULL値が多いデータから、NULL値以外の検索をする
IndexはNULLを含まないのでNULL値以外の検索には効果がある
indexを導入しない方がいい時
1.表の規模が小さいか、表から大部分のレコードを検索する場合
2.WHERE句等の条件としてあまり仕様されないもの
3.列の値が頻繁に挿入、更新、削除される
4.Indexは表に新規行が挿入されればIndexにも自動的に値が格納される。そのためデータの検索速度は向上するが挿入、更新、削除の処理では索引のメンテナ
ンス作業が発生し、速度低下につながる
5.WHERE句の条件として使用されるが、列が式の一部として参照される
MySQLのIndexをはるコツ - Qiita
validation
1. validatesを使い、モデルクラスに検証する条件を定義する。
# 商品名は必須
validates :title, presence: true
2. コントローラーなどでモデルを保存/更新する。
if @product.save
redirect_to @product, notice: '商品を作成しました'
else
render :new
end
3. バリデーションエラー時には、errorsにエラーメッセージが設定されるので、それを表示する
Rails 4でモデルのバリデーションまとめ - Rails Webook
dup
元のオブジェクトと同じクラスの新しいオブジェクトで、
元のオブジェクトのインスタンス変数を新しいオブジェクトにコピーしたもの。
h = Hoge.new hd = h.dup h.name = 'name' hd.name = 'dup' h.name #=> 'name'
uniqueness
指定した属性がユニークであることを検証する。
# 定義
validates email, uniqueness: true # 値がユニークであれば検証成功# テスト
it { is_expected.to validate_uniqueness_of(:email) }
upcase / downcase
self.email = email.downcase
before_save
セーブする直前に毎度呼び出される。
before_save{ self.email = email.downcase }
コールバック
バリデーションの実行、DBの保存などのタイミングで処理を行うための機能。
一部例
- after_validation #検索メソッドでオブジェクトが見つかったタイミングで実行
- before_save #オブジェクトがインスタンス化されたタイミングで実行
Bundler cannot continue.のエラーが出た時
An error occurred while installing pg (0.18.4), and Bundler cannot
continue.
Make sure that `gem install pg -v '0.18.4'` succeeds before bundling.
Bash on WindowsでRailsの環境構築してはまったところ。
以下のサイトを参考にして構築しました。
windowsのbashでRails環境を構築してみる。(Windows 10 Anniversary Update版) - Qiita
デフォルトの状態でgit >rbenv >rubyの順番で試したが、うまくいかず私の場合作業用フォルダを作成してその中でgit >rbenv> rubyの順番で導入しました。
Bundle install できない問題
原因 ローカルではなくグローバルのrubyを使っているから
最新のrubyをダウンロードしたはず、、
$ ruby -v ruby 2.0.0p481 (2014-05-08 revision 45883) [x86_64-linux]
$ rbenv exec gem install bundler Fetching: bundler-1.10.3.gem (100%) Successfully installed bundler-1.10.3 Parsing documentation for bundler-1.10.3 Installing ri documentation for bundler-1.10.3 1 gem installed $ rbenv rehash # 忘れずに! $ which bundle ~/.rbenv/shims/bundle $ bundle install --path vendor/bundle Fetching gem metadata from https://rubygems.org/........ Fetching version metadata from https://rubygems.org/.. Using rake 10.3.2 ...(中略)... Using bundler 1.10.3 Bundle complete! 15 Gemfile dependencies, 45 gems now installed. Bundled gems are installed into ./vendor/bundle.
DBがないと言われる
$bin/rails db:migrate
下のようにでたらおk
== 20170515162447 CreateUsers: migrating ======================================
create_table(:users)
== 20170515162447 CreateUsers: migrated (0.0019s) =============================
Railsの起動にはまる
rails aborted! Errno::EINVAL: Invalid argument - Failed to watch "/home/nishioka/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/activesupport-5.0.0/lib/active_support/locale": the given event mask contains no legal events; or fd is not an inotify file descriptor. /home/nishioka/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/rb-inotify-0.9.7/lib/rb-inotify/watcher.rb:74:in `initialize' /home/nishioka/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/rb-inotify-0.9.7/lib/rb-inotify/notifier.rb:190:in `new'
以下を記入
config/environments/development.rb #config.file_watcher = ActiveSupport::EventedFileUpdateChecker 以下を追加 config.file_watcher = ActiveSupport::FileUpdateChecker
Railsの会 24日目 「%w[]/assert/正規表現/」
今回の進捗です
%w[]
配列を作る。 スペースと区切りで指定する。
例
>> %w[foo bar baz] => ["foo", "bar", "baz"] >> addresses = %w[USER@foo.COM THE_US-ER@foo.bar.org first.last@foo.jp] => ["USER@foo.COM", "THE_US-ER@foo.bar.org", "first.last@foo.jp"] >> addresses.each do |address| ?> puts address >> end USER@foo.COM THE_US-ER@foo.bar.org first.last@foo.jp
.inspect
オブジェクトをわかりやすい文字列に返す。
message = "hello, world" puts message.inspect number = 123 puts number.inspect class Cat def initialize(name, color) @name = name; @color = color end end cat = Cat.new("Tama", "white") puts cat.inspect
結果
"hello, world" 123 #<Cat:0x1a80500 @name="Tama", @color="white">
用途
変数や配列など文字列になる可能性のあるものを調べるときに使う。
inspect (Object) - Rubyリファレンス
assert
処理ができていれば trueを表示 それ以外はメッセージを表示
class AssertTest < ActionController::IntegrationTest def test_assert assert false, "falseは想定外です" assert nil, "何らかの値が設定されるべきです" end end
正規表現
いくつかの文字列を一つ文字列で表す方法。
曖昧検索が可能になる!
メタ文字
通常の文字a,b,c...etc と組み合わせて使います。
例 \d \D \w \W \s \S
正規表現 - Wikipedia
^t.*?[ao]{2,4}.*?@(gmail\.com|yahoo\.co\.jp)
解説
^t → 先頭に t がある。
.*? → 文字がいくつかあるかもしれないし、ないかもしれない。
[ao]{2,4} → a か o が2文字~4文字ある。
@ → @がある。
(gmail¥.com|yahoo¥.co¥.jp)
→ gmail.com か yahoo.co.jp のどちらかがある。
Route設定を一つのファイルで複数行う v5.3
laravelのRouteについて誤認していたのでメモ。
きっかけ
route/web.phpに複数のURLを作ってそれぞれのページにアクセス
できなかったので試行錯誤していた話です。
⚠︎初心者なので間違いなどご指摘があると嬉しいです。
Before Code
これだとエラーでる。今思えばその通りだなって思う。
予測だけど無名関数2つ使うとおんなじ名前(無名)が2つあるよ!って怒ってたんだと思います。
(よくわかってない...)
//routes/web.php Route::get('/', function () { return view('welcome'); //default }); //hogeページのroute設定 Route::get('/hoge', function () { return 'hoge'; });
解決策
hogeControllerを作成
すると、 app/Http/Controllersの中に hogeControllerふぁいるが作成されます!
次にhogeページを作ります! resourceファイルの中に新しくhoge pageを追加しておきましょう。
hogeControllerにrouteの処理を書きます。
何も処理が書いてないと思うので、{ }中に 処理を書いていきましょう!
namespace App\Http\Controllers; use Illuminate\Http\Request; class hogeController extends Controller { public function hoge(){ return view('hoge'); //hogeページ } }
After Code
2つのrouteをかきたいときの書き方。
//routes/web.php Route::get('/', function () { return view('welcome'); //default }); //2page以上からのRouteの設定 の書き方 Route::get('/hoge', 'hogeController@hoge');
参考URL
versionが違うので気をつけてください。
初めてのLaravel 5.1 : (1) ページの表示フロー – ララ帳