はじめに
gemを実装しなくとも論理削除は実装可能ですが、railsライクで論理削除gemのparanoiaを導入して、レコードの論理削除を実装します。
動作としては削除日時(deleted_at)カラムを用意して削除するときに、deleted_atに日時を入れてくれるというものです。この状態でレコードを表示すると、削除されたレコードは抽出対象にならずに表示してくれます。
paranoiaの導入
詳細については以下のリポジトリreadmeを参照ください
gemリポジトリ:
https://github.com/radar/paranoia
paranoiaインストール
Gemfileにparanoiaの定義を記述
gem "paranoia"
反映
bundle install
論理削除用のカラムをテーブルへ追加
論理削除にparanoiaが使用するカラムを用意します。paranoiaではこのカラムを使用してSQLを発行するのでindexを一緒に速度を考慮してつけておきます。
例)Usersテーブルへ論理削除用のdeleted_atカラムを追加します※index込み
rails generate migration AddDeletedAtToUsers deleted_at:datetime:index
マイグレーションファイルの中身は以下のとおりです
class AddDeletedAtToUsers < ActiveRecord::Migration
def change
add_column :users, :deleted_at, :datetime
add_index :users, :deleted_at
end
end
テーブルへ反映します
rake db:migrate
対象テーブルのModelへparanoia機構を反映
対象のテーブルのModelへparanoia設定をします
例)UsersテーブルのModelへ設定します
class Users < ActiveRecord::Base
acts_as_paranoid
end
このときもしもparanoiaのデフォルトのdeleted_atでなく、別の名前のカラム名にした場合は以下のようになります
class Users < ActiveRecord::Base
acts_as_paranoid column: :任意のカラム名
end
paranoiaの使い方
paranoiaを導入したところで、実際にデータを論理削除を行い、テーブルの参照を行って表示されないことを確認してみます。
メソッドの詳細系はreadmeを参照ください
gemリポジトリ:
https://github.com/radar/paranoia
テーブルからレコードの論理削除
テーブルのレコードを削除します
例)UsersテーブルのID「1」のレコードを削除します
user = Users.find(1) user.destroy
ここで発行されているSQLは以下の通りです
update users set updated_at = ’2015-07-23 00:00:00′, deleted_at = ’2015-07-23 00:00:00′ where id = 1
テーブルのレコード一覧を確認
正しく削除されているか確認します
Users.all
※ID「1」が表示されていなければOKです
ここで発行されているSQLは以下の通りです
select * from users where deleted_at is null
テーブルから削除したレコードインスタンスの確認
削除したインスタンスの状態を確認します
user.deleted_at
※削除した日時が表示されていればOKです
テーブルの削除レコードを含むレコードの一覧を確認
削除したレコードも含み全体を確認します
Users.with_deleted
※ID「1」とその他レコードが表示されていればOKです
ここで発行されているSQLは以下の通りです
select * from users
テーブルの削除したレコードの一覧を確認
削除したレコードを確認します
Users.only_deleted
※ID「1」が表示されていればOKです
ここで発行されているSQLは以下の通りです
select * from users where deleted_at is not null
テーブルからレコードの物理削除
paranoiaを導入したことにより、論理削除を強制としますが、それでも物理削除をしたい場合もあります。
その場合はdestoyメソッドに!をつけてdestory!を実行すると物理削除になります。
はじめに
BootStrap2から3がリリースされ、いまやRailsなどもBootStrap3が標準で組み込まれています。
2,3年前のシステムではBootStrap2が一般的だったため、その頃のレイアウトをそのまま組み込もうとすると表示がうまくいきません。
※BootStrap2で使えていたクラス名が非推奨になったわけではなく使えなくなりました
ほぼクラス名が変更になっただけなので、一つずつ変更していけばうまく表示されます。
たとえばGrid表示では「hero-unit」→「jumbotron」に変更、「row-fluid」→「row」に変更「span[X]」→「col[X]」に変更などです。
サイトのhtmlを一発でBootStrap2からBootStrap3へマイグレーションしてくれるようなサービスもあるのかもしれません。
BootStrap2からBootStra3へ移行手順
BootStrapの公式サイトにマイグレーションのためのクラスの変更前から変更後が載っているのでこちらを参考に変更するとよいです。
http://getbootstrap.com/migration/
クラス名のN/Aについて
公式サイトのクラス名でBootStrap2で使えていたものが3になりN/A記載でマイグレーションできないクラス名がいくつかありました。
こちらは別途同等のCSSを独自で書くしかなさそうです。
はじめに
railsでは標準のirbよりも高度なpryがコンソールツールとしてよく使われています。
そしてデバッグ時にpryまたはirbでモデル表示「[モデル名].allなど」をおこなうと表示があまり見やすくありません。
もう少し見やすくということでHirbでは表形式で表示してくれます。
pry + Hirb の導入
Gemfileの追記
プロジェクト直下にあるGemfileへpryとHirbのgemを記述します
pryはpry-railsのみで良いのですが、よく使われるその他pry関連gemも入れておきます。詳細はドキュメントを参照ください。
group :development, :test do gem 'hirb' # hirb gem 'hirb-unicode' # hirbの日本語対応用 gem 'pry-rails' # pryコンソール gem 'pry-doc' # メソッドを表示 gem 'pry-byebug' # デバッグを実施(Ruby 2.0以降で動作) gem 'pry-stack_explorer' # スタックをたどる end
※どちらもデバッグツールのためdevelopment,testとしておきます
インストール実行
$ bundle install
.pryrcファイルの追加
.pryrcファイルをプロジェクト直下に以下の内容で作成してください。
begin require 'hirb' rescue LoadError # Missing goodies, bummer end if defined? Hirb # Slightly dirty hack to fully support in-session Hirb.disable/enable toggling Hirb::View.instance_eval do def enable_output_method @output_method = true @old_print = Pry.config.print Pry.config.print = proc do |*args| Hirb::View.view_or_page_output(args[1]) || @old_print.call(*args) end end def disable_output_method Pry.config.print = @old_print @output_method = nil end end Hirb.enable end
内容はバージョンにより更新される場合があるので最新版は以下のサイトより確認ください。
https://github.com/pry/pry/wiki/FAQ#hirb
動作チェック
pryコンソールモードに入ります
$ rails c
pryコンソールモードでモデルの情報を表示します
pry(main)> User.all
※Userモデルの値を表示
実行結果として表形式で表示されるようになっていればOKです。
はじめに
CentOSでVimのバージョンを更新します。7.2などの場合、プラグインがうまく動作しない場合が多いので、アップしておきます。
アップデート
$ sudo yum -y install git $ sudo yum -y install ncurses-devel $ git clone https://github.com/vim/vim.git $ cd vim $ git tag -n $ git checkout -b 7-4-729 refs/tags/v7-4-729 $ ./configure --enable-multibyte --with-features=huge --disable-selinux --prefix=/usr/local $ sudo make && sudo make install
※git tag -n で表示されているバージョンで好きなバージョンを指定してください
これで/usr/local/bin/vimへpathが通っていれば、vimを起動した時にバージョンが7.4にアップデートされているはずです
はじめに
mac環境では問題なかったんですがcentosのvim上で[ :NeoBundleUpdate ]を実行した時に、エラーがプラグイン数の数だけでてしまったので調べてみました。
事象の原因と解決まで
もともとのneobundleの設定とvimrcの設定状況から解決案までです。
neobundle.vimの導入
gitでneobundle.vimをcloneしておきます
mkdir -p ~/.vim/bundle
cd ~/.vim/
git clone https://github.com/Shougo/neobundle.vim.git neobundle.vim
エラー時の.vimrcの記述
cloneしたneobundle.vimを読み込みます
filetype off
if has(‘vim_starting’)
set runtimepath+=~/.vim/neobundle.vim
call neobundle#rc(expand(‘~/.vim/.bundle’))
endifNeoBundle hoge1
NeoBundle hoge2
NeoBundle hoge3filetype plugin on
filetype plugin on
※NeoBundleのhogeはいずれかのプラグインです
原因?
エラー内容から、neobundle#beginとneobundle#endのブロック間でneobundleをコールするようにとのことです。
エラー内容:
NeoBundle` commands must be executed within a neobundle#begin/end block.
今まで出ていなかったのに、centos環境でなぜでたのか、バージョン?仕様変更?
NeoBundleのバージョンにより仕様がかわった?とかでしょうか。
参考:
https://teratail.com/questions/9759
解決
.vimrcをエラーの通りbeginとendで囲ってやります
filetype off
if has(‘vim_starting’)
set runtimepath+=~/.vim/neobundle.vim
call neobundle#begin(expand(‘~/.vim/.bundle’))
endifNeoBundle hoge1
NeoBundle hoge2
NeoBundle hoge3call neobundle#end()
filetype plugin on
filetype plugin on
再度vim上で[ :NeoBundleUpdate ]でエラーがでなくなりました。難しいですね。
はじめに
今年のGoogle/IOのカンファレンス内でEclipseのADTのサポート終了が2015年末にすると発表されました。
以下記事に記載した通り、AndroidStudioへの移行をしたほうが良さそうです。
サポート終了してもEclipseADTでの開発はしばらくはできますが、問題はAPIのバージョンがアップした時にサポート外のため無視されるということですね。
[Android]2014年12月EclipseADT配布終了(サポート終了間近)!新開発環境AndroidStudio(正式版1.10)の移行を考える
アナウンス内容
アナウンス内容は以下より確認できます
公式アナウンス
http://android-developers.blogspot.com.au/2015/06/an-update-on-eclipse-android-developer.html
Eclipseのサポート終了について
サポート終了の理由はEclipseADTのサポートを終了してAndroidStudioの開発に注力をするからとアナウンスしてます。
ついでにコンパイラツールAntの終了もするそうです。とうとう便利なGradleをみんな使うことになりそうですね。
To that end and to focus all of our efforts on making Android Studio better and faster, we are ending development and official support for the Android Developer Tools (ADT) in Eclipse at the end of the year. This specifically includes the Eclipse ADT plugin and Android Ant build system.
移行方法(Time to Migrate)
移行は簡単なのでガイドラインを見るようにとアナウンスしてます
For more details on the migration process, check out the migration guide. Also, to learn more about Android Studio and the underlying build system, check out this overview page.
移行のガイドライン
https://developer.android.com/sdk/installing/migrate.html
次の段階へ(Next Steps)
Googleは今後数カ月掛けてパフォーマンスツール(DDMS・トレースビューなど)も完全に移行するとアナウンスしてます。
Over the next few months, we are migrating the rest of the standalone performance tools (e.g. DDMS, Trace Viewer) and building in additional support for the Android NDK into Android Studio.
移行時期について
サポート終了が決定したので、年末までまたずに早急にAndroidStudio(またはIntelliJ IDEA)へ移行しておいたほうがいいですね。
はじめに
コマンドラインから打ったコマンドのインクリメンタルサーチ(逐次検索)が可能なpecoを導入してみました。
とても便利だったので忘れないようにメモしておきます。
peco導入
percolというインクリメンタルツールをGO言語に移行して日本人によりpecoが出来たようです。違いはGO言語のためインストールが簡単になったようです。
そのため元のpercolでも同様にできるので、どちらをいれても良さそうです。
環境はmacでパッケージ管理はhomebrew、シェルはzshです。
公式ページ
http://peco.github.io/
https://github.com/peco/peco
pecoインストール
homebrewでインストールを行います
$ brew tap peco/peco $ brew install peco
使い方
psコマンドでインクリメンタルサーチ表示
ps aux | peco
Query>入力モードになり、インクリメンタルサーチで探したいキーを入力するとピックアップされます。
また矢印キー(↓↑)で移動ができ、エンターで決定できます。
※Query>はエンターを押すと抜けることができます
これだけでも、 | grep を使うより便利になりました。
zshのhistory(Ctrl + r)をpeco表示にする
zshのhistory機能は大変便利ですが、それをpeco表示に変えてさらに扱いやすくします。
.zshrc設定/反映
.zshrcへ関数を定義します(peco-select-history)
キーバインドをzshのCtrl+rをオーバーライドする形で設定します。
function peco-select-history() { local tac if which tac > /dev/null; then tac="tac" else tac="tail -r" fi BUFFER=$(\history -n 1 | \ eval $tac | \ peco --query "$LBUFFER") CURSOR=$#BUFFER zle clear-screen } zle -N peco-select-history bindkey '^r' peco-select-history
設定反映
source .zshrc
使い方
ターミナルからCtrl + rを押すとpeco表示の履歴検索になります。とても便利でした。
peco導入
そのほか、pecoで関数を作成し、他コマンドと組み合わせていろいろできそうです。
Qiitaやブログの記事を見るとgitと組み合わせて使う場合が多い様です。
参考:
http://qiita.com/Kuniwak/items/b711d6c3e402dfd9356b
http://qiita.com/la_luna_azul/items/7998abd0379e8a3248f4
coffee-break
Don't write code that useless.
1日5杯はコーヒー、カフェオレ飲みます。狭心症のため安静にします☆松本 雄貴
Kotlinでサービスリリース目指す!
iOSでチャットアプリ作成中。自然言語解析LSIを習得中
Mac / Android・iOS / Rails / Oracle
2017年 Lpic L2取得
2012年 Android技術者資格取得
2010年 OracleMasterGold10g取得
2008年 CCNAQiitaもたまに投稿
https://qiita.com/y-matsumoto東京近郊で常駐開発探してる方はこちらよりご連絡ください
SES企業でパートナー会社を探している企業様はこちらよりご連絡ください
スプリットカメラ iOS / Android
音声認識で聞いた日付から曜日当てアプリ Android
ソーシャルタイマー Android
カテゴリー
- ActiveRecord (2)
- Android (52)
- AndroidStudio (10)
- Ansible (1)
- AWS (1)
- Bash (18)
- Blog (7)
- BootStrap (1)
- CentOS (16)
- Chef (1)
- css (2)
- Eclipse (5)
- error (1)
- Facebook (2)
- Firebase (1)
- FuelPHP (16)
- Git (22)
- GitHub (3)
- Gradle (2)
- GraphAPI (1)
- Grunt (1)
- heroku (2)
- illustrator (1)
- iOS (17)
- Java (4)
- Jenkins (1)
- jQuery (3)
- Kotlin (2)
- Mac (22)
- nginx (1)
- Node.js (3)
- peco (1)
- php (5)
- Python (1)
- Rails (16)
- Ruby (11)
- shell (1)
- SNS (1)
- Swift (2)
- tmux (2)
- Vagrant (6)
- Vim (6)
- windows (2)
- WordPress (3)
- zsh (4)
- フリーランス (1)
- ライブラリ (1)
- 勉強会 (2)
- 宣伝 (1)
- 未分類 (2)
最近の投稿
- [MAC]HighSierraでgitプッシュエラー「Unable to negotiate with xxx.xxx.xxx.xxx port xx: no matching cipher found. Their offer: aes128-cbc,3des-cbc,blowfish-cbc,cast128-cbc,arcfour,aes192-cbc,aes256-cbc,rijndael-cbc@lysator.liu.se fatal: Could not read from remote repository.」
- [iOS]iOS11からFacebook,Twitter連携(シェアなど)廃止の対応方法
- [iOS]速報2017AppleSpecialEventのiOS11、iPhone8など発表内容について
- [iOS][Firebase]The default Firebase app has not yet been configured. Add `[FIRApp configure];
- [iOS]2017年9月リリースのiOS11で開発者が対応するべきこと
- 今人気の現金化サービスCASH(キャッシュ)を使ったレビュー
- [Pandoc][Mac]pandocでmarkdownからwordファイル作成
- [Android]映画サマーウォーズの聞いた日付(誕生日)から曜日当てをアプリ音声認識で簡単に実現
- [Android]起動しているActivityを取得するadb shell コマンド
- [Android][Kotlin]kotlin学習で参考になるサイト一覧
アーカイブ
- 2018年5月
- 2017年9月
- 2017年8月
- 2017年7月
- 2017年6月
- 2017年5月
- 2017年2月
- 2017年1月
- 2016年12月
- 2016年7月
- 2016年6月
- 2016年1月
- 2015年12月
- 2015年11月
- 2015年10月
- 2015年9月
- 2015年8月
- 2015年7月
- 2015年6月
- 2015年5月
- 2015年4月
- 2015年3月
- 2015年2月
- 2015年1月
- 2014年12月
- 2014年11月
- 2014年6月
- 2014年5月
- 2014年4月
- 2014年3月
- 2014年2月
- 2014年1月
- 2013年12月
- 2013年11月
- 2013年9月
- 2013年8月
- 2013年7月
- 2013年6月
- 2013年5月
- 2013年4月
- 2013年3月
- 2013年2月
- 2013年1月
- 2012年12月
- 2012年10月
- 2012年5月
- 2010年6月
エントリ