完全備忘録
除去したくないタグを第2引数に指定
rails c
で起動した体で
1
2
|
ApplicationController.helpers.sanitize "<div>4文字以上で入力ください<br />入力された文字は2文字です", :tags => %(br)
# => "4文字以上で入力ください<br />入力された文字は2文字です"
|
yieldするメソッドの引数とblockに引数とかあると混乱するのでメモっとく。
1
2
3
4
5
6
7
8
|
def hoge(hoge)
p hoge
yield("bar")
end
hoge("hoge"){|bar| p bar}
# "hoge"
# "bar"
|
好きです。Array.wrap
ActiveSupportでArrayクラスで定義されてます。
1
2
|
Array.wrap("hoge") #=> ["hoge"]
Array.wrap(["hoge"]) #=> ["hoge"]
|
うんうん。いい。
下のコードは適当に書いたので動かんかったらごめんなさい。
1
2
3
4
|
class User < ActiveRecord::Base
has_one :lover
has_many :friends
end
|
ってモデルがあったら
1
2
3
4
5
6
7
8
9
10
|
def print_relations(lover_or_friends)
if lover_or_friends.instance_of?(Lover)
p lover_or_friends
else
lover_or_friends.each do |lover_or_friend|
p lover_or_friend
end
end
end
|
って、いちいち判定せずに。
1
2
3
4
5
|
def print_relations(lover_or_friends)
Array.wrap(lover_or_friends).each do |lover_or_friend|
p lover_or_friend
end
end
|
って、いっそArrayにしてしまって、回すとスッキリ
通常使ってたらあんまりないのかもしれないけど。
libとかでxxx _path(rake routesで一番左にでるやつ)のurlを取りたいとき。
1
|
Rails.application.routes.url_helpers.xxx_path(@user)
|
で取れる。
1
|
Rails.application.routes.url_helpers.user_register_shop_staffs_path(shop) # => "/shops/1/staffs/user_register"
|
軽くはまった。
rails 3.0.5
jpmobile 1.0.0
最初にアクセスしたコントローラで、flashを設定しつつredirect _toしたらflashから値が取り出せなかった。
flashはsession使っているから、初回のみsession作ってあげる必要があったみたい。
個数分受けとればいい。
勝手に展開してくれる。
1
2
|
array = [["1a","1b"],["2a","2b"]]
array.map{|a1,a2| a1 + a2} # => ["1a1b", "2a2b"]
|
injectとかと併用する場合は括弧で囲う。
以下は連想配列に変換する例
1
2
|
array = [["1a","1b"],["2a","2b"]]
array.inject(Hash.new){|hash,(param1,param2)| hash[(param1)] = param2; hash } # => {"1a"=>"1b", "2a"=>"2b"}
|
いいですね。Happyになりますね。
each _with _indexは0始まりでインデックスが使える。
1
|
["a","b"].each_with_index{|elem,i| puts i} #=> 0 1
|
でも連番降ったりとか1始まりが欲しい場合がある。
そんな場合。
1
|
["a","b"].each.with_index(1){|elem,i| puts i} #=> 1 2
|
もちろん数値変えればスタートの値も変わる。
rails consoleで
1
|
ActiveRecord::Base.logger = Logger.new(STDOUT)
|
って書くとSQLが吐かれるようになります。
1
2
|
User.first
User Load (0.1ms) SELECT `users`.* FROM `users` WHERE (users.deleted_at IS NULL) LIMIT 1
|
アクセス中のURL取得
1
|
request.url #=> "http://localhost:3000/users/index"
|
アクセス中のホスト
1
|
request.host #=> "localhost"
|
whereつけると戻り値がrelationになるから、to _sqlが使える。
scoped使うとrelation取れる。
1
|
User.unscoped.to_sql #=> "SELECT `users`.* FROM `users`"
|