はじめに
Java開発で便利なjava.langをもう少しラップして機能アップされているjavaエンジニアお馴染みのライブラリをAndroidStudioへ導入します。
ApacheCommonsLangについて
ApacheCommonsLangを導入することで、langよりも便利な機能が使えるようになります。
Apache CommonsライブラリはMavenリポジトリにあります
現在バージョンは3系になってます。
Mavenリポジトリ:
http://mvnrepository.com/artifact/commons-lang/commons-lang
ApacheCommonsLangの代表的なユーティリティは以下になります。
AnnotationUtils : Annotation用ユーティリティ
ArrayUtils : 配列ユーティリティ
BitField : ビット演算ユーティリティ
BooleanUtils : Booleanユーティリティ
CharEncoding : 文字エンコーディングユーティリティ
CharUtils : Charユーティリティ
ClassUtils : Classユーティリティ
EnumUtils : Enumユーティリティ
LocaleUtils : Localeユーティリティ
ObjectUtils : Objectユーティリティ
RandomStringUtils : 乱数文字列生成ユーティリティ
Range : Range(範囲)ユーティリティ
SerializationUtils : Serializationをサポートユーティリティ
StringEscapeUtils : 文字列エスケープユーティリティ
StringUtils : 文字列ユーティリティ
SystemUtils : java.lang.helperをサポートするユーティリティ
プロジェクトへApacheCommonsLangの取り込み
プロジェクトのapp/build.gradle(AndroidStudioではGradleScriptでModule: appのbuild.gradle)へ以下を追加します
dependencies {
compile group: ‘org.apache.commons’, name: ‘commons-lang3′, version: ’3.4′
}
※dependenciesはプロジェクト新規で存在しているため、compile構文を一行追加でOKです
Mavenリポジトリをダウンロードして参照するためプロジェクト内へjarを配置などは不要です。
編集が出来ないのでさらに機能拡張する場合には継承して追加するといいとおもいます。
あとはgithubにもアップされていたため、こちらからsubmoduleなどで取り込む場合はクラスの変更が直接出来るのでいいかもしれません。
ここまでで取り込み完了です
ApacheCommonsLangのライブラリを使ってみる
まずはインポートします
import org.apache.commons.lang3.StringUtils;
※現在バージョン3系のためlangに3がつきます(バージョンにより違います)
例としてStringUtilsのisEmptyメソッドを使ってみます
String test = “”; // なんらかの入力文字
if (StringUtils.isEmpty(test)){
//testが空だった場合のなんらかの処理
}
以上です。
いろいろとStringUtilsクラスのメソッドなど一覧をみてみると便利そうなのがありました。
個人的にはRandomStringUtilsクラスが便利なので良く使います。
はじめに
マテリアルデザインはシンプルでフラットなGoogleが提唱しているAndroidの新しいデザイン模様です。
Android開発でマテリアルデザインを取り込むのをサポートしているライブラリを導入してみます。
マテリアルデザインについては以下を参照ください
https://www.google.com/design/spec/material-design/introduction.html#
MaterialDesignLibraryについて
MaterialDesignLibraryはAndroidのマテリアルデザインをサポートしているライブラリです。
※starも現在4700ついてました
実際どういったライブラリかどうかは以下のデモアプリで確認できます
https://play.google.com/store/apps/details?id=com.gc.demomaterialdesign
MaterialDesignLibraryリポジトリ詳細は以下を確認ください
https://github.com/navasmdc/MaterialDesignLibrary
プロジェクトへMaterialDesignLibraryの取り込み
まずは導入するプロジェクトを作成してください。
プロジェクト直下へ移動して以下のコマンドでライブラリをgitのサブモジュールとして取り込みます。
※GitHubのリポジトリより直接ダウンロードして配置しても問題ありません
$ git submodule add https://github.com/navasmdc/MaterialDesignLibrary.git
$ git submodule init
$ git submodule update
プロジェクトへMaterialDesignLibraryを読み込み
プロジェクトのapp/build.gradle(AndroidStudioではGradleScriptでModule: appのbuild.gradle)へ以下を追加します
repositories {
jcenter()
}dependencies {
compile ‘com.github.navasmdc:MaterialDesign:1.5@aar’
}
※dependenciesはプロジェクト新規で存在しているため、compile構文を一行追加でOKです
ここまでで取り込み完了です
MaterialDesignLibraryのViewを使ってみる
レイアウトの外枠は以下を設置してください
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:materialdesign="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent" android:layout_height="match_parent" > </RelativeLayout>
上記のRelativeLayout内へボタンを配置してみます
<com.gc.materialdesign.views.ButtonFlat android:id="@+id/buttonflat" android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="#1E88E5" android:text="Button" />
これでボタンが表示されればOKです。簡単にマテリアルデザインのビューを実装できました。
ボタンのイベントコールバックなどもAndroidデフォルトのボタンと変わらないので簡単です。
その他Viewの詳細についてはREADMEより確認してください
https://github.com/navasmdc/MaterialDesignLibrary
はじめに
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
はじめに
gitですでに管理対象となっているファイル・ディレクトリを無視する方法です。
状況としては.gitignoreファイルを置き忘れや対象ファイルに追加し忘れた場合にcommitしてしまった時などです。
解決策
git rm コマンドを使うことで解決します
ファイルを管理対象から除外する場合
git rm –cached [ファイル名]
※この場合.gitinogreにも追加すること
ディレクトリを管理対象から除外する場合
git rm -r –cached [ディレクトリ名]
※この場合.gitinogreにも追加すること
ファイルを管理対象から除外し且つ作業ディレクトリからも削除する場合
git rm [ファイル名]
ディレクトリを管理対象から除外し且つ作業ディレクトリからも削除する場合
git rm -r [ディレクトリ名]
ファイル・ディレクトリ管理対象からまとめて除外する場合
git ls-filesを使用してgitignoreファイルの除外ファイルをまとめて除外します。
git ls-filesは以下サイトを参照
http://transitive.info/article/git/command/ls-files/
ファイル指定して.gitinogreの除外リストをそのまま管理対象から外します
git rm –cached `git ls-files –full-name -i –exclude-from=.gitignore`
gitが無視リストとする.gitignore、.git/info/excludeにマッチするファイルをまとめて管理対象から外します
git rm –cached `git ls-files –full-name -i –exclude-standard`
はじめに
Rails開発で「不要なDBのクエリー処理」があります。それらを改善するためのEagerLoadingについて対応策についてメモしておきます。
N+1問題について
「N+1」問題は2つのテーブルで関連(association)している場合にありえます。
SQL文が「N+1」回分実行されてしまいパフォーマンスを低下させてしまいます。データ件数が増えれば増えるほど、この問題でパフォーマンスが落ちます。そのためこの問題が起きないように対応する必要があります。
N+1問題の実例
ユーザ情報を保持するusersテーブルと、掲示板投稿データを保持するpostsテーブルで1対Nの関係を持っている場合の例を出します。
usersモデル:
class User < ActiveRecord::Base
has_many :posts
end
postsモデル:
class Post < ActiveRecord::Base
belongs_to :user
end
postsコントローラ:
def index
@posts = Post.all
end
postsビュー(postsの全データを表示):
<% @posts.each do |post| %>
〜 なんらかの処理 〜
<% end %>
※posts.eachでSQL文「select * from posts」が実行されます
postsビュー(postsからusersのデータを取得):
<% @posts.each do |post| %>
<%= post.user.name %>
<% end %>
※post.user.name(nameはDBカラム)でSQL文「select users.* from users where users.id = ? limit 1 ["id", 1]」がpostsの件数分実行されます
件数分実行することがN+1問題となりパフォーマンスに影響を与えてしまっています。
N+1問題をEager Loadingで改善
Eager Loadingとはあらかじめ読み込むデータを取得(1件毎ではなく)しておくことです。
postsコントローラ:
def index
@posts = Post.all.includs(:user)
end
includsメソッドを使い、事前にusersのデータを全て取得しておきます。これによりビューで読み込む時に1件毎に読み込まなくなります。
実際は「SELECT users.* FROM users WHERE users.”id” IN (1, 2, 3, 4, 5)」のように1つのSQLが発行されるのみになります。
includesメソッドやその他EagerLoadingメソッドの参考:
http://qiita.com/k0kubun/items/80c5a5494f53bb88dc58
はじめに
modelのnewとbuildをネットで見ると濫用していて使い道がわからなかったので調べてみました。
new/buildについて
以下、ドキュメントよりbuildはnewのエイリアスと記載されていました。そのため機能的には全く同じようです。
参考:
newについて
http://railsdoc.com/references/new
buildについて
http://railsdoc.com/references/build
暗黙的な使い方の違いについて
どちらも同じということですが、やはり使い分けには暗黙のルール(コーディングルール)があるようです。
例えば、Postsテーブル(投稿用)とComments(投稿に対するコメント)の場合、カーディナリティは1:Nになります。
その場合にPostsにはnew、その子に当たるCommentsにはbuildという具合に関係性を表す場合に使い分けているようです。
modelクラスではPostsはhas_manyで:comments、Commentsはbelong_toで:postsという関係性です。
Posts[1]
Posts.new
Comments[N]
Comments.posts.build
はじめに
railsはデフォルトでエラーメッセージなどの表示文字列は英語になっています。そこでローカライズ対応として日本語化する方法になります。
ローカライズ概要
railsではローカライズするために、config/localesディレクトリの中にyaml言語ファイルを作成(日本語の場合:ja.yml)し、yaml形式(シーケンスとマッピング)で対応する日本語を記述すると自動変換してくれるようになります。
日本語化対応
1.config/applicationファイルの編集
以下のコメントアウトを外し対応言語をjaとします
config.i18n.default_locale = :ja
2.config/locales/ja.ymlファイルを作成する
新規で作成し、手動で設定しても可能ですが、既にrailsのローカライズ対応済みのファイルがgithubで公開されているため、こちらを使用します。
https://github.com/svenfuchs/rails-i18n
日本語化ファイルはjaファイルになります
https://github.com/svenfuchs/rails-i18n/blob/master/rails/locale/ja.yml
ja.ymlファイルを取得
$ curl -o config/locales/ja.yml -L https://github.com/svenfuchs/rails-i18n/blob/master/rails/locale/ja.yml
これで日本語化完了です。ja.ymlの中身をみて、日本語文字列を別途変更したい場合は手動で変更してください。
エラーメッセージのja.ymlは以下のようになっています
errors: format: "%{attribute}%{message}" messages: accepted: を受諾してください。 blank: を入力してください。 present: は入力しないでください。 confirmation: と%{attribute}の入力が一致しません。 empty: を入力してください。 equal_to: は%{count}にしてください。 even: は偶数にしてください。 exclusion: は予約されています。 greater_than: は%{count}より大きい値にしてください。 greater_than_or_equal_to: は%{count}以上の値にしてください。 inclusion: は一覧にありません。 invalid: は不正な値です。 less_than: は%{count}より小さい値にしてください。 less_than_or_equal_to: は%{count}以下の値にしてください。 not_a_number: は数値で入力してください。 not_an_integer: は整数で入力してください。 odd: は奇数にしてください。 record_invalid: バリデーションに失敗しました。 %{errors} restrict_dependent_destroy: "%{record}が存在しているので削除できません。" taken: はすでに存在します。 too_long: は%{count}文字以内で入力してください。 too_short: は%{count}文字以上で入力してください。 wrong_length: は%{count}文字で入力してください。 other_than: は%{count}以外の値にしてください。 template: body: 次の項目を確認してください。 header: one: "%{model}にエラーが発生しました。" other: "%{model}に%{count}個のエラーが発生しました。"
はじめに
Railsで簡易メッセージをViewで表示するために用意されているflashオブジェクトについてメモしておきます。
Controllerからredirect_toメソッドでViewに渡すことが一般的です。
flashオブジェクトとは
ControllerからViewに簡易メッセージ(ログインメッセージ、エラーメッセージ)を送信し表示する場合に使います。
http://railsdoc.com/references/flash
使い方
Controller側(redirect_toメソッド)
redirect_toメソッドはオプションにnotice,alert,flashを用意しています。
notice例:
redirect_to action: 'index', notice: 'ログインに成功しました'
alert例:
redirect_to action: 'index', alert: 'ログインできません'
flash例:
redirect_to action: 'index', flash: {notice: 'ログインに成功しました'}
※flashでキーはオプションのnotice,alertのほか任意の名前でも可能です
http://railsdoc.com/references/redirect_to
View側
notice,alertを表示する例:※bootstrapでメッセージ枠を表示
<% if flash[:notice] %> <div class="alert alert-success"> <%= flash[:notice] %> </div> <% end %> <% if flash[:alert] %> <div class="alert alert-danger"> <%= flash[:alert] %> </div> <% end %>
ifでnotice,alertの中身がある場合に表示とするのがよく使われる
はじめに
Rubyで「!!」を二つ続けて書く演算子がありました。使用所は多くはないとは思いますが便利なので記憶に残しておきます。
「!!」演算子の概要
使い方・使い所
戻り値がnilの場合に、そのままnilではなくfalseを返してもらいたい場合に使えます。
!!true # -> returns true
!!false # -> returns falsea = “string”
!!a # -> returns truea = nil
!!a # -> returns false
参考:
http://codebytes.us/ternary-operator-and-the-double-bang-in-ruby/
使用例
メソッドの内部で戻り値をtrue/falseにしたい場合などが使用例として考えられます
def login?
!!login_user
end
その他のRuby演算子について
Rubyは様々な演算子が用意されています。
個人的には覚えると便利な演算子に「||=」「&=」などあります。
下記サイトでまとまっていましたのでこちら参照下さい
http://docs.ruby-lang.org/ja/2.0.0/doc/symref.html
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学習で参考になるサイト一覧
2024年5月 月 火 水 木 金 土 日 « 5月 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 アーカイブ
- 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月
エントリ