YOSHINO日記

プログラミングに関すること

Railsのstale?: キャッシュを利用してサーバー負荷を減らす

Etag? Browser Cache: How ETags works in Rails 3 and Rails 4 - mohanraj nagasamy Ruby on Rails のConditionalGet について サーバは応答するときにコンテンツの Last-Modified とETag を付与します。ブラウザはその値を覚えておきます。 同じコンテンツ…

名前重要

初めに 名前のつけ方で参考になるサンプルを集めた記事です。 随時更新予定。 ネイティブアメリカンの信仰 すべての人物・事物には真の名前があり、その名前を知るものはそれを支配することができる matz 適切な名前をつけられると言うことは、その機能が正…

Railsでデザインパターン「Lazy Factory」

Lazy Factory?? 遅延読み込み - Wikipedia デザインパターンの観点では遅延初期化はFactory Method パターンと共に用いられる。これは3つのアイデアを組み合わせである。 クラスインスタンスを得るためにファクトリメソッドを利用する(Factory Method パタ…

schemeをemacsで使う

scheme開発環境をつくる 僕と契約してLisperになってよ!-Gaucheの開発環境を整えよう- - (define -ayalog '()) 結論:Emacsとgaucheの組み合わせが一番良さそう。 環境:ubuntu 18 $ sudo apt-get installl gauche $ sudo apt-get install emacs25 $ mkdir …

ActiveStorageでみた不自然な条件分岐に関して

解せぬ。 ActiveStorageのコミットログを最初から見て勉強しております。 def self.decode(encoded_key) key, expires_at = verifier.verified(encoded_key) if key # ここ!! key if expires_at.nil? || Time.now.utc < expires_at end end keyがnilを来る…

何かをした後にインスタンスを生成したい時は、tap×tapする

ActiveStorageの例 以下の例は、ActiveStorageのコードの一部である。 class << self def build_after_upload(data:, filename:, content_type: nil, metadata: nil) new.tap do |blob| blob.filename = filename blob.content_type = content_type blob.upl…

Rails on Ubuntu: MySQLのアクセスエラーと戦う

MySQL5.7のrootパスワード再設定 rootのパスワードはランダムに設定されるようなので、こちらを参考に変更する。 Reset MySQL root password on Linux パスワード無しにしたいのだけれど。。。 うっかり、mysql_secure_installationを利用した設定で、 MySQL…

Herokuにpushする時にはまった: Rails needs superuser privileges to disable referential integrity.

エラーに関して WARNING: Rails was not able to disable referential integrity.:00, ETA: 00:00:00 This is most likely caused due to missing permissions. Rails needs superuser privileges to disable referential integrity. なぜエラーがでるのか?…

自作アプリにrubocopのデフォルト設定を適用した

はじめに github.com を参考にさせていただいてアプリを作成していたのでですが、やはりデフォルトから自分で設定を変えていく方向に変更する。 現時点。 120 files inspected, 585 offenses detected Metrics/BlockLength: spec無いのblockは説明するために…

ember-cli-mirageでFixtures+Relationを行おうとするとうまくいかない(たぶんBUG)

ISSE fixtureデータを使って、モデル間の関係を、belongsToとかhasManyを利用して定義するとエラーがでる。 assert.js:39 Mirage: Your GET handler for the url /instructors threw an error: model.hasInverseFor is not a function 関連 2018/5でまだ解決…

Ember.js入門18: モックサーバーを作成してCRUDを試してみる

モックサーバーのルーティング mirage/config.js export default function() { this.get('/books'); this.get('/books/:id'); this.post('/books'); this.delete('/books/:id'); } adapterはデフォルト。 app/adapters/application.js import DS from 'ember…

Ember.js入門17: yieldを使ってコンポーネント を入れ子構造にしてみる

2つのコンポーネントを用意する 入れ子構造で利用するコンポーネントを用意します。 $ ember g component big-list # create app/components/big-list.js # create app/templates/components/big-list.hbs $ ember g component small-list # create app/com…

Ember.js入門16: コンポーネント に外部から変数をわたす

コンポーネントは外部の世界から孤立している componentは、javasciptとhbsの2つのファイルから構成されている。 $ ember g component student-list # create app/components/student-list.js # create app/templates/components/student-list つまり、コン…

Ember.js入門15: Closure action と コンポーネント : 別日コントローラーで定義されているアクションをコンポーネントから呼び出す。

コンポーネントに渡すためにアクションを定義する(closure action)。 モデルとアクションを定義します。 最終的には、このモデルとアクションをコンポーネントを経由してあつかいます。 app/routes/application.js import Route from '@ember/routing/rout…

Ember.js入門14: Componentで再利用性を高める

基本的なこと componentファイルには"-"がつかなくてはいけない。 app/components/student-info.js import Component from '@ember/component'; export default Component.extend({ click(){ $('html').fadeToggle('slow', 'linear'); $('html').delay(250).…

Ember.js入門13: 別のcontrollerやrouteの値にアクセスする

準備:2つのcontrollerを定義する こんな感じのルーティングを想定します。 import EmberRouter from '@ember/routing/router'; import config from './config/environment'; const Router = EmberRouter.extend({ location: config.locationType, rootURL:…

Ember.js入門12: コントローラーの基礎

基本的なこと ember.jsには、controllerとrouteが存在します。 覚えて置かなければいけないことの1つは、読み込まれる順番です。 1: controller 2: route です。 コントローラーの基本 最初に基本的な使い方をみてみます。 controllerでactionを定義し…

Ember.js入門11: クエリパラメーターを使って動的にviewを変更する

クエリパラメーターを実際に使ってみる app/controllers/application.js import Controller from '@ember/controller'; export default Controller.extend({ queryParams: ['student'], student: "http://localhost:4200/?student=**** クエリパラメーターを…

Ember.js 入門10: 非同期的なルーティング: RSVPを使ってロード時とエラー時の処理を行う

RSVPオブジェクト Asynchronous Routing ローディング時間の間の処理 app/router.js Router.map(function() { this.route('students'); }); Promiseを定義します。 app/routes/students.js import Route from '@ember/routing/route'; export default Route.…

Ember.js入門9:モックサーバーを作成する:Fixtureデータを使う場合。

ember-cli-mirage? テストや開発のためのクライアントサーバーのモックを作成する。 https://github.com/samselikoff/ember-cli-mirage http://www.ember-cli-mirage.com/ ember install ember-cli-mirage #=> create /mirage/config.js #=> create /mirage…

Ember.js入門8: デバックの方法

ヘルパーメソッドであるlogを使用する 例えば以下のようなコンポーネントがある場合。 app/components/log-example.js import Component from '@ember/component'; export default Component.extend({ helloText: 'Hello World' }); app/templates/component…

Ember.js入門7: viewに結びついたアクションの基礎

ボタンを押すたびにtrue、falseが切り替わる togglePropertyは、propertyの値を反転させる。 app/components/action-component.js import Component from '@ember/component'; export default Component.extend({ showText: true, actions: { toggleText(){ …

Ember.js入門6: 基本的なルーティング

emberでは名前が非常に重要である。 emberにおいても、Railsと同じく名前がとても大事な意味をもつ。 例えば、 create app/templates/helloworld.hbs create app/controllers/helloworld.js のファイルで定義されるデータはbindingされている。 indexは特殊 …

Ember.js入門5: 配列に使える様々なメソッド

forEach rubyのeach_with_index const students = ['Erik', 'Jim', 'Shelly', 'Kate']; students.forEach(function(item, index) { console.log(`Student #${index+1}: ${item}`); }) Student #1: Erik Student #2: Jim Student #3: Shelly Student #4: Kate…

Ember.js入門4: mixinでコードをDRYに記述する

Rubyでいうと、classにmoduleをincludeするのとすごく似ている。 app/app.js myObject.jsはincludeする必要がある。 import Application from '@ember/application'; import Resolver from './resolver'; import loadInitializers from 'ember-load-initiali…

Ember.js入門3: bindingsでオブジェクトのプロパティ同士を結びつける

bindings: setもgetもできる import EmberObject from '@ember/object'; export default function() { const Teacher = EmberObject.extend({ homeroom: '', age: '', gradeTeaching: '' }); const Student = EmberObject.extend({ homeroom: Ember.computed…

Ember.js入門2: computed propertiesとobserverで状態変化を監視する

とりあえずObjectをつくる app/app.js import Application from '@ember/application'; import Resolver from './resolver'; import loadInitializers from 'ember-load-initializers'; import config from './config/environment'; import myObject from '.…

ember.js入門1: Ember CLI  ターミナルでemberコマンドを実行する

セットアップ:Ember CLI 前提 Ember CLIをインストールする環境としてnpmとnodeをがインストールされている必要がある。 環境は以下。 OS: ubuntu 17 $ npm -v #=> 6.1.0 $ node -v #=> v9.2.1 ember-cli グローバルにインストールする $ sudo npm install …

cancancanの内部の動きを追う

はじめに cancancan https://github.com/CanCanCommunity/cancancan 権限を一元管理できるgem。 とっても便利。 内部動作が気になったので追ってみます。 1: viewのcan? まず、viewのcan?が読み込まれます。 - if can? :buy, @product %h2 Anyone can buy P…

Rails: delegateを使ってモデルのフォームをすっきりさせる

delegate delegateを使います。 最近知ったRailsの便利なメソッド 指定したクラスのメソッドを簡単に呼び出せるようにしてくれます。 モデルの定義 schema create_table "accounts", force: :cascade do |t| t.integer "user_id" t.string "email" t.binary …