サクサク読めて、アプリ限定の機能も多数!
トップへ戻る
Pixel 9
zucay.hatenadiary.org
git dff の差分行を色付きにする: git config --global color.ui truegit dffを色つきにした上で、差分が出た文言だけ隣り合わせに表示する: git diff --color-words
共同で開発している方に、 (*´ω`*)<「fuwa っていうブランチをgithubにつくっといたからそこにコミットしといてー」 なんて言われることはよくあると思います ですがリモートブランチを確認するためにgit branch -r しても、、、 $ git branch -r origin/master その、、fuwaなんてブランチがないΣ(゜Д゚) ってときは焦らず git fetch。 $ git fetch origin(←リモートブランチの名前) * [new branch] fuwa -> origin/fuwa (以下略) $ git branch -r origin/master origin/fuwa ってことでちゃんと表示されるようになります(!)。 - 実際の作業では、上記fuwaに対して以下のようにコミットすることになります。 ローカルブランチfuwaにチェック
デバッグなどで、Gemソース中身を見たいことってありますよね。 でもGemは、Windows/Linux/MacOS/RVM有無などでインストールされる場所が異なるので、 「あれーどこだっけ(´・ω・`)」 となりがち。そんな時はgem which コマンド。例えばrails のソースを見たいときは $ gem which rails /Library/Ruby/Gems/1.8/gems/railties-3.1.0.rc4/lib/rails.rb みたいな感じで確認することができます。
Railsでnamed_scopeってありますよね。モデルクラスの中で scope :hoge, lambda{|value| where("name = ?", value)} みたいに記述しておくと、 Model.hoge('myname') と書くだけでname = mynameなレコードを引っ張ってきてくれる強力なやつです。 、、、、。 で、lambdaって何?(´・ω・`) 色々調べてみると、大変良くまとまっているサイトがありました。 参考URL: http://d.hatena.ne.jp/shunsuk/20090101/1230816826 さらに短くまとめると、、 lambda : 匿名関数 ということだそうです。 似たようなものにProcがあって、、 Proc:blockを使いまわせるようにしたコードスニペット ですと。 Railsさんは、上のように'named_sco
Railsをはじめて触ったとき 3.daysのように書けてしまうので驚いた方も多いのではないでしょうか。 Rubyでは、自分のソースコードの好きなところで class Numeric # Numericクラスにfoobarメソッドを追加する def foobar p 'foobar' end end 3.foobar => "foobar" のように、基本クラスを拡張できてしまいますので、どこでメソッド定義されているのか探すのが大変です。 そこでRubyでは、Method#owner(), Method#source_location()という定義情報にアクセス出来るメソッドが用意されています。 それでは「3.days」がどこで定義されているか調べてみましょう。 m = 3.method(:days) # Methodオブジェクトが返却される m.owner # 定義されているクラス =>
よーしパパgemを作って公開しちゃうぞー( ー`дー´)キリッ(←) なときの備忘録です。 gemを作るワークフローにはさまざまなモノがあり、作成ライブラリもいくつかあって複雑に感じやすいと思いますが、 下記のbundlerを使う方法が一番シンプルで分かりやすいと思います。 (1)gemのプロジェクトを作る $ bundle gem gem_name #基本となるファイルが作られる (2)gemspecファイルを、空気を読みつつ直す (3)version.rb を編集する ※同一バージョンででgemを再度公開しようとするとエラーが出ますので、 gem公開のたびにバージョンをインクリメントする必要があります。 (4)gemfileの作成 $ rake build (5)ローカル環境へのインストール $ rake install (6)gemの公開 $ rake release 作ったgemを
where()などで必要な複数レコードを抽出しておいて、一括で値変更できます。 (ActiveRecord::Relationのメソッドとして実装されてる) いままでsql直書きしてたよ。。(´・ω・`) その前は、eachをレコード分実行して値書き換えてたよ。よくないよね。。(´;ω;ω;`) 忘備録的にリファレンスマニュアルのサンプルを貼り付けます。 # Update all customers with the given attributes Customer.update_all :wants_email => true # Update all books with 'Rails' in their title Book.update_all "author = 'David'", "title LIKE '%Rails%'" # Update all avatars migr
Railsでは、"rails s" コマンドを叩くとデフォルトポートである3000番で起動します。 "rails s -p 3001"のようにポート番号を指定することで明示的に使うポートを設定することも出来ますが、 「このアプリは"rails s"って打ったら無条件に4000番ポートで起動したいよー」なんて場合もあると思います。 デフォルトのポート番号はRails::Serverクラスのdefault_optionsメソッドで定義されているので、 その値を上書きしてやればデフォルトポートを変更できます。 Serverクラスの書き換えは、Serverクラスが使われる前のタイミングで行う必要があるので、config/boot.rbなどに下記コードを書きます。 require 'rails/commands/server' module Rails class Server def defaul
Rails3.2から導入されたActiveRecord::Relation#uniq はとっても便利で、 records.select(:name).uniq と書くだけで、ユニークなnameの一覧が取得できます! (recordsは何かしらレコードの集合です。) でも records = Client.order(:address) : records.select(:name).uniq と書くと、 ActiveRecord::StatementInvalid: PG::Error: ERROR: for SELECT DISTINCT, ORDER BY expressions must appear in select list というようなエラーを吐いてしまいます。 これは、selectしていないカラムに含まれていないカラム(この例ではaddress)でorderしようとしたため
railsコマンドでは、 -eオプションでproductionを設定します。 例: rails s -e production rakeコマンドでは、環境変数RAILS_ENVにproductionを設定します。 例: rake RAILS_ENV=production db:migrate
ネット上の文字に含まれる「ノーブレークスペース(nbsp)」など、入力できない文字にも正規表現でマッチできる方法です。 試しに、「ふわ」にマッチする正規表現をつくってみましょう。 STEP1: 文字コード番号を調べる 文字コード表サイトなどからコード番号を取得します。 例えば、 http://www.tamasoft.co.jp/ja/general-info/unicode.html を見ると、「ふ」は「3075」番、「わ」は「308F」番だということがわかります。 STEP2: 文字を[\uNNNN]形式で正規表現記述する 先ほど調べたコード番号を[\uNNNN]形式で入力します。[....]は「[...]内に含まれる文字いずれかとマッチする」という意味もありますが、「\u」を先頭に付けることで、文字コード番号が示す文字を指すことになるようです。 #「ふわ」にマッチ 'ふわ' =~ /
$ git push heroku yourbranch:master
PaperClipはRailsでアップロードするための便利ライブラリです。 (func09さんの言葉を借りると「便利すぎて鼻血がでそう」) 参考URL: http://www.func09.com/wordpress/archives/674 保存先にAmazonS3も使えて大変便利なのですが、 日本語ファイルをアップロードしようとするとエラーとなってしまいます(Ver.3.0.2で確認)。 デバッグしたところ次のモンキーパッチをすれば動くようですので、公開してみます。 自分の開発しているアプリに、以下のコードを書けばおkです(`・ω・´)シャキーン RAILS_ROOT/config/boot.rb module Paperclip class UploadedFileAdapter def inspect '=' end end end (キリッ PaperclipがAmazonS3に
(Controllerに限らないですが)重い処理があると、htmlレンダリングはその処理後に行われるためユーザにはフリーズしたように見えてしまいます。(´・ω・`) 〜コントローラで〜 def heavyTask #重い処理 sleep(1000) end 、、、1000秒待たないと画面が表示されないよ(´・ω・`) 重い処理はThread.start()で別スレッド化して、同時にhtmlレンダリング出来るようにしましょう。 def heavyTask Thread.start do #重い処理 sleep(1000) end #重い処理を待たずにhtmlレンダリングできるよ(`・ω・´) end 以上のコードで、重い処理と画面表示を並列化出来ます。ぱちぱち。 ん、重い処理が終わったらその通知を画面に表示したいのですか? それはまた別のおはなし。(←ホントは知らな(ry 【注意】 Thre
herokuで生SQLを叩きたい場合です。 heroku-sql-consoleというプラグインを使います。 URL:https://github.com/ddollar/heroku-sql-console $ heroku update した上で $ heroku plugins:install git://github.com/ddollar/heroku-sql-console.git して、 $ heroku sql --app APPLICATION_NAME すると、heroku にrails dbconsole したのと同じ状態で接続できます。
カラム名に「type」を使ったところ、以下のようなエラーが出てしまいました。 ActiveRecord::SubclassNotFound (The single-table inheritance mechanism failed to locate the subclass: 'news'. This error is raised because the column 'type' is reserved for storing the class in case of inheritance. Please rename this column if you didn't intend it to be used for storing the inheritance class or overwrite Site.inheritance_column to use another
column_names()というメソッドがActiveRecord::Baseに用意されているので、それを使います。 ModelClass.column_names というように呼べば、カラム名の配列が取得されます。 もちろん「created_at」などRailsが勝手に作ったカラムも入っています。 === 何かやりたいことがあったとき、 http://api.rubyonrails.org/ にアクセスしてそれっぽいキーワードで検索すると、たいていそれっぽい名前のメソッドが定義されてますね。 今回も「rails カラム名一覧」などでググッたのですが出てこず(´・ω・`)、 apiリファレンス相手に「column_namesとかありそうじゃない?(*´ω`*)」 って検索したら出てきました。類推しやすいシステムって素敵、Railsって素敵。
MS Wordのワードファイル(.doc)を操作することって結構あると思います。 テンプレートになるファイルを用意して、そこにDBから取ってきた値を書きこんで、、みたいに。 Word2003からはXML形式(.docx)でで記述できるのでだいぶ楽になるのですが、 大人の事情でWord2000を使ってるところも多いですよね(´・ω・`) 素の.docを操作するには、COM/OLEという魔窟を探検しないといけません。 これが結構大変で、、 Rubyの文献は少なく、、(´・ω・`) Microsoftのサイト(MSDN)で読めるAPIリファレンスは場所がころころ変わってリンク切れが多い、、(´・ω・`) その上、ようやく見つけたAPIリファレンスには返却値の型が書いてないとか親クラスがわかんないとか(´・ω・`) 魔物は深夜に牙を剥きます。。 なので、MyDocというラッパークラスを作りました。
2つ方法があります。 (1)マイグレーションをテーブル追加前に戻しテーブル名を変更の上再度マイグレーションする。 (2)カラム名を変更するマイグレーションを新規に行う。 「カラム名間違えたぁぁあ!(´A`#)」ぐらいなら(1)、開発を進めてしまっていたら(2)、が良いでしょう。 (1)の方法だとDBのテーブルをデータごと消されちゃうから要注意です。 以下、手順: (1) (1-1)マイグレーションをロールバック: $ rake db:rollback マイグレーションを2回ロールバックするときは: rake db:rollback STEP=2 (1-2)マイグレーションファイルを修正する。 (1-3)ファイルを再度マイグレート: $ rake db:migrate ※複数回ロールバックしていたら、同じ回数実行する。 (2) $ rails g migration changecol_co
Railsでは、「データベースには時刻を標準時で格納しておき、 表示する際には指定したタイムゾーンで表示する」 という考え方を採用しています。ですので、時間を管理する際は、タイムゾーンを意識しなくてはなりません。 といっても、普段はモデルクラスさんが頑張って変換してくれているので、あんまり意識しなくてよいです。 タイムゾーンのセットは、 config/application.rb config.time_zone = 'Tokyo' で東京にセットされます。 そして、時刻データの格納時: modelInstance.time_at = Time.now.to_s(:db) とかしておけば、 DBデータ格納時に、UTC(世界標準時)/フォーマットは"YYYY-MM-DD hh:mm:ss" という形式でDBにデータが格納されます。 Viewでの表示時は: modelInstance.time
特にプロトタイピングしている時などに、テーブルにカラム追加したくなること、よくありますよね?よね? よくあることはワンライナーで楽しましょう。 $ rails g migration AddColnameToTablename colname:string これでおK(`・ω・´) え、最初にちゃんとテーブル設計しろですかそうですか(´・ω・`)
メソッドの呼び出し元メソッドをを取得する方法を探していたのですが、 http://stackoverflow.com/questions/5100299/how-to-get-the-name-of-the-calling-method puts caller[0][/`.*'/][1..-2] というような表記がありました。実際うまく取得できるのですが、 [/`.*'/][1..-2] はなにをあらわしているんだろう。。。 正規表現を文字列インデックスとして使ってるんでしょうかね。 ということで調べてみました。 # 正規表現をインデックス値とすることで、部分文字列が取得できる str[/regexp/] # => 文字列から正規表現にマッチした部分文字列を切り出す 'piyoPiyo'[/Pi/] # => 'Pi' # Rangeオブジェクトをインデックス値とすることで、部分文字列が取
このページを最初にブックマークしてみませんか?
『ふわふわRuby on Rails』の新着エントリーを見る
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く