ラベル Rails の投稿を表示しています。 すべての投稿を表示
ラベル Rails の投稿を表示しています。 すべての投稿を表示

2014年7月4日金曜日

Punditでsessionとかにアクセスしてみるヘ(^o^)ノ

CanCanあかんみたい。なので。。。

Punditを使ってみました。

シンプルで良くできたgemだと思います。

とりあえずインストール
$ rails g pundit:install

するとapp/policies/application_policy.rbが作成されます。

authorizeはアクセス制御

index?とかupdate?とかにロジックを書けばよし

コントローラにコレ書いて
rescue_from Pundit::NotAuthorizedError, with: :user_not_authorized

プライベートメソッドでどっかにredirectすれはおk
def user_not_authorized
  # errorメッセージ
  flash[:error] = "You are not authorized to perform this action."
  
  # リダイレクト先
  redirect_to(request.referrer || root_path)
end

AppicationPolicyクラス内でセッション情報にアクセスしたい!

application_controller.rb
before_action :_current_session

protected def _current_session
  accessor = instance_variable_get(:@_request)
  ApplicationPolicy.send(:define_method, :session, ->{accessor.session})
end

パラメータもいけまっせー
ApplicationPolicy.send(:define_method, :params, ->{accessor.params})

( ̄(エ) ̄)彡☆


参考
rails 4 対応の認可の gem

2014年6月12日木曜日

Rubyのancestorsメソッドヘ(^o^)ノ

ancestorsメソッドはクラスの親クラスを配列にして返します。

インクルードしたモジュールも含まれます。

ところで。。。

RailsでDate.tomorrowとすれば、明日の日付が取得できます。

RubyのDateクラスを拡張していますね−。

モンキーパッチは手軽で簡単に拡張できます。

Railsは。。。

調べてみましょう。

Railsコンソールで実行すると
$ Date.ancestors
=> [Date, DateAndTime::Calculations, Comparable, Object, ActiveSupport::Dependencies::Loadable, PP::ObjectMixin, JSON::Ext::Generator::GeneratorMethods::Object, Kernel, BasicObject]

注目すべきは
DateAndTime::Calculations

ちなみにRubyのirbで実行すると
$ Date.ancestors
=> [Date, Object, Kernel, BasicObject]

todayやtomorrowはDateAndTime::Calculationsに定義されています。
[参考] DateAndTime::Calculations

これModuleですねー。

なぜ、わざわざモジュールに定義してインクルードしているのか?
class date
  include DateAndTime::Calculations
end

それはオープンクラス拡張の可視化です。

モンキーパッチは手軽ですが、わかりずらいのです。

DateAndTime::Calculationsを見ればどんな拡張しているのか一目瞭然ですよね!

( ̄(エ) ̄)彡☆

2014年6月8日日曜日

Rails Girls Osaka #1 に行ってきたよーヘ(^o^)ノ

昨日はRails Girls Osaka #1にスポンサーとしてお邪魔しましたー。





















コーチのみなさんも、参加されたGirlsのみなさんも楽しそうなのが印象的でした。

楽しそうなみなさんを見ているとムズムズして、僕も途中から裏でコーディングを始めちゃったw

Heroku弁当うまかったー

みなさん無事、Herokuにpushできました。

プライベートでHeroku使ってますが、やっぱりいいですね

インストールも簡単 ⇒ heroku toolbelt

最後のつじたさんの挨拶は感動的でしたねー(>_<)

僕もShinosaka.rbを主催しているので、伝わるものがありました。

最初は不安でいっぱいでしたw

Rails Girls Kyoto #2の告知もありましたねー(楽しみや

ホントにみなさんお疲れ様でしたヘ(^o^)ノ

みなさんとすばらしい時間を共有できたことを幸せに思います。

僕の中で企画中のイベントもありますw

またお会いできることを楽しみにしています。

( ̄(エ) ̄)彡☆


2014年5月16日金曜日

Rails generate model オプションのparentを使ってみたヘ(^o^)ノ

rails generate modeのparentオプションを調べてみたヘ(^o^)ノ

オブジェクト指向か?と言われると微妙なとこです(;^ω^)

前にこんなモデル設計しました

















userには共通項目があって、customer、employeeそれぞれの項目をもっています。

このプロジェクトでは、それぞれのテーブルをリレーションして実装しました

ふりかえって、parentオプションを使ってみます

userモデル typeカラムを追加
$ rails g model User first_name:string last_name:string \
       email:string company:string unit:string type:string

customerモデル
$ rails g model customer --parent user

employeeモデル
$ rails g model employee --parent user

userモデルはこんなの
class User < ActiveRecord::Base
end

customerモデルはこんなの
class Customer < User
end

employeeモデルはこんなの
class Employee < User
end

それぞれuserモデルを継承しています

では、employeeモデルにバリデーションを設定しましょう
class Employee < User
 validates :working_arrangements,
   presence: true
end

バリデーションの確認してみましょう






コールバックされましたヘ(^o^)ノ

customerモデルはどうでしょう?








saveできましたねー

userテーブル一つで、各モデルで振る舞いを変更できました

( ̄(エ) ̄)彡☆

2013年11月24日日曜日

Rails Application Templatesを使ってみたよヘ(^o^)ノ

Rails Application Templatesとは、Railsアプリの開発環境設定を自動化するやつ

PC開発環境の自動化はBOXENでどうぞ

Railsアプリの環境構築するまで(環境はMacでrbenvを使用
$ mkdir sample_app
$ cd sample_app
$ bundle init
$ vim Gemfile #gem 'rails'をコメントアウト
$ bundle install --path vendor/bundler
$ bundle exec rails new . -m https://raw.github.com/murajun1978/rails_template/master/rails_template.rb --skip-bundle --skip-test-unit

僕はローカルのgem環境を汚したくないので、bundle installするときにpath指定しています

RubyMotionのgemとかごちゃごちゃしちゃう…

ちなみにローカルgemにはspringやherokuなんかをインストールしています

springはbundlerで管理すると意味ないみたいなので

bundle install のpathを毎回指定するのがめんどくさい人は

~/.bundler/config
BUNDLE_PATH: ./vendor/bundler

僕のRails Application Templates ⇒ GitHub murajun1978 / rails_template

作りかけで参考になるかわかりませんがwww

みなさんも自動化して少しでもラクしましょうねー

( ̄(エ) ̄)彡☆

2013年11月14日木曜日

Paperclipを使ってみたよヘ(^o^)ノ

仕事でファイルを扱うプロジェクトがあり、Paperclipというgemを使ってみた

ブラウザからはサンプルを見ればすぐに理解できる

では、ファイルからPaperclipを使って登録するにはどうすれば良いのか?

やってみたヘ(^o^)ノ

ActionDispatch::Http::UploadedFileを使えば良いのだー

サンプルソースはGitHub⇒paperclip_sample

めっちゃ簡単w

Paperclip便利だー

( ̄(エ) ̄)彡☆

2013年10月17日木曜日

Rails4の新規プロジェクトが開発フェーズに突入したよヘ(^o^)ノ

最近、アジャイル本を読みあさって現場に落とし込めればと猛勉強中ヘ(^o^)ノ

タイトルからアジャイルらしさが見受けられませんが…Σ(゚д゚lll)

設計フェーズも終わり、開発フェーズに突入しました(現場w)

開発チームのルールはTDD、ペアプロ、RSpecによる単体テスト&Capybaraでの結合テスト

ビルドを壊したらスタバのコーヒーをメンバーにごちそうなど

さっそく、本日ビルドを壊してしまいました(;・∀・)

言い訳

  1. svnよくわからない
  2. commit ⇒ Jenkins (実は今日のコミットもミスが原因


普段はGitを使ってる

  1. ローカルにブランチキリ放題ヘ(^o^)ノ
  2. branch ⇒ commit ⇒ merge ⇒ push ⇒ Jenkins

さて、検証機のセッティングに2日弱かかりました(お疲れ様でした!

KVMなので本気でVagrant + Chefを考えます

RSpecの設定

これも自動化しよう…

今回のプロジェクトではCapybaraの結合テストがあるのでViewとControllerの単体テストは行いません( ー`дー´)キリッ

config/application.rb
config.generators do |g|
  g.test_framework :rspec,
    routing_specs: false,
    controller_specs: false,
    view_specs: false
end

Gemfile
group :development, :test do 
  gem 'rb-fsevent'
  gem 'terminal-notifier-guard'
  gem 'guard-rspec'
  gem 'guard-spring'
  gem 'rspec-rails'
  gem 'factory_girl_rails'
end

group :test do 
  gem 'turnip'
  gem 'capybara'
  gem 'launchy'
  gem 'poltergeist'
end

Guardfile
guard :rspec, cmd: 'spring rspec --color --format d' do
  watch(%r{^spec/.+_spec\.rb$})
  watch(%r{^lib/(.+)\.rb$})     { |m| "spec/lib/#{m[1]}_spec.rb" }
  watch('spec/spec_helper.rb')  { "spec" }

  # Rails example
  watch(%r{^app/(.+)\.rb$})                           { |m| "spec/#{m[1]}_spec.rb" }
  watch(%r{^app/(.*)(\.erb|\.haml|\.slim)$})          { |m| "spec/#{m[1]}#{m[2]}_spec.rb" }
  watch(%r{^app/controllers/(.+)_(controller)\.rb$})  { |m| ["spec/routing/#{m[1]}_routing_spec.rb", "spec/#{m[2]}s/#{m[1]}_#{m[2]}_spec.rb", "spec/acceptance/#{m[1]}_spec.rb"] }
  watch(%r{^spec/support/(.+)\.rb$})                  { "spec" }
  watch('config/routes.rb')                           { "spec/routing" }
  watch('app/controllers/application_controller.rb')  { "spec/controllers" }
end

spec/spec_helper.rb
config.include FactoryGirl::Syntax::Methods
config.before(:all) do
  FactoryGirl.reload
end


開発中の技術的なとこはできる範囲で書いていくヘ(^o^)ノ

Minamisenba.rbのGithubグループ作った(まだなにもない

https://github.com/minamisenbarb

ホームページとかイベント告知とかやっていきます。

よろしくお願いします( ̄(エ) ̄)彡☆

2013年7月12日金曜日

RailsでMySQLに接続できないヘ(^o^)ノ

Railsでmysql2のgemがインストールできないの続き

gemがインストールできたのでscaffoldしてみたー

Library not loaded: libmysqlclient.18.dylib (LoadError)

また、なんか無いって怒られた(;・∀・)

$ sudo ln -s /usr/local/mysql/lib/libmysqlclient.18.dylib /usr/lib/libmysqlclient.18.dylib

再びscaffoldヘ(^o^)ノ

でけた(Rails4の場合)

これでも動かない場合は…

Connector/C 6.1がいるかもしれない

./bundle/config
UNDLE_BUILD__MYSQL: --with-mysql-config=/usr/local/Connector6.1のぱす/bin/mysql_config

もし、gemのmysqlバージョンとインストールされてるバージョンが違うって言われたら…

MySQL Community Server 5.7.1 m11をインストールすると幸せになるかも

実は…Rails3.2.11の環境ではここまでしないと動かなかった(;・∀・)

Postgres.appみたいなのあれば幸せになれるのになー

( ̄(エ) ̄)彡☆

2013年7月11日木曜日

Railsでmysql2のgemがインストールできないヘ(^o^)ノ

RailsとMySQLで開発してると、mysql2のgemインストールすると…

checking for mysql_query() in -lmysqlclient... no
checking for main() in -lm... yes
checking for mysql_query() in -lmysqlclient... no
checking for main() in -lz... yes
checking for mysql_query() in -lmysqlclient... no
checking for main() in -lsocket... no
checking for mysql_query() in -lmysqlclient... no
checking for main() in -lnsl... no
checking for mysql_query() in -lmysqlclient... no
checking for main() in -lmygcc... no
checking for mysql_query() in -lmysqlclient... no
*** extconf.rb failed ***
Could not create Makefile due to some reason, probably lack of necessary
libraries and/or headers.  Check the mkmf.log file for more details.  You may
need configuration options.

Provided configuration options:
 --with-opt-dir
 --without-opt-dir
 --with-opt-include
 --without-opt-include=${opt-dir}/include
 --with-opt-lib
 --without-opt-lib=${opt-dir}/lib
 --with-make-prog
 --without-make-prog
 --srcdir=.
 --curdir
 --ruby=/Users/murajun1978/.rbenv/versions/2.0.0-p247/bin/ruby
 --with-mysql-config
 --without-mysql-config
 --with-mysql-dir
 --without-mysql-dir
 --with-mysql-include
 --without-mysql-include=${mysql-dir}/include
 --with-mysql-lib
 --without-mysql-lib=${mysql-dir}/
 --with-mysqlclientlib
 --without-mysqlclientlib
 --with-mlib
 --without-mlib
 --with-mysqlclientlib
 --without-mysqlclientlib
 --with-zlib
 --without-zlib
 --with-mysqlclientlib
 --without-mysqlclientlib
 --with-socketlib
 --without-socketlib
 --with-mysqlclientlib
 --without-mysqlclientlib
 --with-nsllib
 --without-nsllib
 --with-mysqlclientlib
 --without-mysqlclientlib
 --with-mygcclib
 --without-mygcclib
 --with-mysqlclientlib
 --without-mysqlclientlib


Gem files will remain installed in /Users/user_name/dev/rails/asa_cloud_system/vendor/bundler/ruby/2.0.0/gems/mysql-2.9.1 for inspection.
Results logged to /Users/user_name/dev/rails/asa_cloud_system/vendor/bundler/ruby/2.0.0/gems/mysql-2.9.1/ext/mysql_api/gem_make.out

An error occurred while installing mysql (2.9.1), and Bundler cannot continue.
Make sure that `gem install mysql -v '2.9.1'` succeeds before bundling.

(゚д゚)!

ならば!
$ bundle config build.mysql --with-mysql-config=/usr/local/mysql/bin/mysql_config

あかん!

ん?ちょっとまてよ…

~/.bundle/config
BUNDLE_BUILD__MYSQL: --with-mysql-config=/usr/local/mysql/bin/mysql_config

BUNDLE_BUILD__MYSQL2: --with-mysql-config=/usr/local/mysql/bin/mysql_config

いけたやん(;・∀・)

そうだよね、mysql2だもんね…

( ̄(エ) ̄)彡☆

2013年7月10日水曜日

Railsで複数カラムのリレーションヘ(^o^)ノ

Railsは複合キーでのリレーションができない(;・∀・)

こんなgemがあったりする → composite_primary_keys

とても便利!

こんな実装を覚えたw
has_one :xxx, conditions: proc { ["id = ?", self.xxx_id] }

結構使えるかもヘ(^o^)ノ

( ̄(エ) ̄)彡☆

2013年7月7日日曜日

Rails4でRSpec ヘ(^o^)ノ

Rails3からRails4へアップグレードしてみましたヘ(^o^)ノ

TurnipとCucumberについても近々書こう

Gemfile
source 'https://rubygems.org'

gem 'rails', '4.0.0'

group :development do 
  gem 'sqlite3'
  gem 'better_errors'
  gem 'binding_of_caller'
end

group :test do
  gem 'rspec-rails'
  gem 'spring'
  gem 'turnip'

  gem 'guard-rspec'
  gem 'guard-spring'

  gem 'growl'
  gem 'rb-fsevent'

  gem 'factory_girl_rails'
  gem 'database_cleaner'
end 

group :production do
  gem 'thin'
  gem 'pg'
end

gem 'sass-rails', '~> 4.0.0'

gem 'uglifier', '>= 1.3.0'

gem 'coffee-rails', '~> 4.0.0'

gem 'jquery-rails'

gem 'turbolinks'

gem 'jbuilder', '~> 1.2'

group :doc do
  gem 'sdoc', require: false
end

gem 'bcrypt-ruby', '~> 3.0.0'

Guardfile
guard :rspec, spring: true, turnip: true do
  watch(%r{^spec/.+_spec\.rb$})
  watch(%r{^lib/(.+)\.rb$})     { |m| "spec/lib/#{m[1]}_spec.rb" }
  watch('spec/spec_helper.rb')  { "spec" }

  # Rails example
  watch(%r{^app/(.+)\.rb$})                           { |m| "spec/#{m[1]}_spec.rb" }
  watch(%r{^app/(.*)(\.erb|\.haml)$})                 { |m| "spec/#{m[1]}#{m[2]}_spec.rb" }
  watch(%r{^app/controllers/(.+)_(controller)\.rb$})  { |m| ["spec/routing/#{m[1]}_routing_spec.rb", "spec/#{m[2]}s/#{m[1]}_#{m[2]}_spec.rb", "spec/acceptance/#{m[1]}_spec.rb"] }
  watch(%r{^spec/support/(.+)\.rb$})                  { "spec" }
  watch('config/routes.rb')                           { "spec/routing" }
  watch('app/controllers/application_controller.rb')  { "spec/controllers" }

#  # Capybara features specs
#  watch(%r{^app/views/(.+)/.*\.(erb|haml)$})          { |m| "spec/features/#{m[1]}_spec.rb" }

  # Turnip features and steps
  watch(%r{^spec/acceptance/(.+)\.feature$})
  watch(%r{^spec/acceptance/steps/(.+)_steps\.rb$})   { |m| Dir[File.join("**/#{m[1]}.feature")][0] || 'spec/acceptance' }
end

app/models/user.rb
class User < ActiveRecord::Base
  has_secure_password

  validates :login_name, uniqueness: true
  validates_presence_of :login_name, :admin
  validates_format_of :login_name, with: /\A[a-z][a-z0-9]*[0-9]\Z/
end

spec/models/user_spec.rb
require 'spec_helper'

describe User do
  describe '#validate' do 
    before :all do
      @user = FactoryGirl.create(:user)
    end
    
    it "正常に保存できる" do
      expect(@user.save).to be true
    end

    context 'login_name' do
      it "login_nameは数字のみは不可" do
        @user.login_name = "111"
        expect(@user.save).to be false
      end

      it "login_nameは英字のみは不可" do
        @user.login_name = "eee"
        expect(@user.save).to be false
      end

      it "login_nameの先頭は必ず英字" do
        @user.login_name = "111aaa"
        expect(@user.save).to be false
      end

      it "login_nameは必須" do
        @user.login_name = ""
        expect(@user.save).to be false
      end

      it "login_nameは重複不可" do
        @user2 = FactoryGirl.build(:user2)
        expect(@user2.save).to be false
      end
    end

    after :all do
      User.delete_all
    end
  end
end

spec/factories/users.rb
FactoryGirl.define do
  factory :user, class: User do |f|
    f.login_name 'murajun1978'
    f.password 'murajun1978'
    f.password_confirmation { |u| u.password }
    f.admin true
  end

  factory :user2, class: User do |f|
    f.login_name 'murajun1978'
    f.password 'sss'
    f.password_confirmation { |u| u.password }
    f.admin true
  end
end

.rspec
--color
--format d

実行結果
User
  #validate
    正常に保存できる
    login_name
      login_nameは数字のみは不可
      login_nameの先頭は必ず英字
      login_nameは重複不可
      login_nameは英字のみは不可
      login_nameは必須

Finished in 0.10709 seconds
6 examples, 0 failures

validateの正規表現で^や$が使えなくなってたねー

( ̄(エ) ̄)彡☆

2013年2月11日月曜日

Railsで画像をバイナリファイルで保存ヘ(^o^)ノ

( ̄(エ) ̄)彡☆

適当にひな形作る
$ rails g scaffold photo image:binary

app/models/photo.rb
class Photo < ActiveRecord::Base
  attr_accessible :image, :picture_file
  
  def picture_file= (file)
    if file
      self.image = file.read
    end
  end
end

app/controllers/photos_controller.rb
#追加
def picture
  @image = Photo.find(params[:id])
  send_data(@image.image)
end

config/routes.rb
#変更
resources :photos do
  member do
    get :picture
  end
end

app/views/photos/_form.html.erb
#変更
<%= f.label :picture_file %>
<%= f.file_field :picture_file %>
app/views/photos/index.html.erb
<% @photos.each do |photo| %>
  <%= image_tag picture_photo_path(photo), :size => '30x30' %> #修正
  <%= link_to 'Show', photo %>
  <%= link_to 'Edit', edit_photo_path(photo) %>
  <%= link_to 'Destroy', photo, method: :delete, data: { confirm: 'Are you sure?' } %>
<% end %>

app/views/photos/show.html.erb
Image:
  <%= image_tag picture_photo_path(@photo), :size => '30x30' %> #修正

これでバイナリーデータで保存して、表示できるヘ(^o^)ノ

でもね… select_dateのおかげでレコード毎にselect文が─=≡Σ((( つ•̀ω•́)つ

うーん、なんか良い方法ないですかね?

2013年2月5日火曜日

RailsのURIヘ(^o^)ノ

Railsで検索フォームで検索した結果を表示した場合
localhost:3000/search?utf8=✓&title=&commit=検索

こんな感じになる…

なんか( ´Д`)キモッ

localhost:3000/search?title=xxxxみたいにしたい!

調べたヘ(^o^)ノ

Railsのutf8パラメータとcommitパラメータ

なるほど…

commitパラメータ
フォームに複数ボタンを設置した場合に判別できる
今回は不要
<%= submit_tag "検索", name: nil %>

utf8パラメータ
IE対策みたいだから(ЭεЭ)イラネーヨ
app/helpers/application_helper.rb
module ApplicationHelper
 def utf8_enforcer_tag
  return ""
 end
end

URLにクエリを含める理由は検索結果をbookmarkできるから

同じ検索を何度もするのは( ゚Д゚)マンドクセー

セキュリティ上よくない場合もあるので気を付けてねー

( ̄(エ) ̄)彡☆

Railsのsecret_tokenヘ(^o^)ノ

RailsアプリをまんまGithubへプッシュしたらconfing/initializers/secret_token.rbも!!!

このsecret_tokenはセッションデータを署名するために使う秘密鍵 Σ(゚д゚lll)

これを変更してWebサーバにデプロイすれば問題ないけど…

色々調べてるとみんないろんな方法で対処している

rake secretで生成された文字列をコピーする(絶対忘れるw

Rakeタスクを作成する(僕はこれにした

$ rails g task generate_secret_token

lib/tasks/generate_secret_token.rake

参考というかそのままw → config/initializers/secret_token.rb を生成する Rake タスク

登録されているかチェックしてrakeコマンド
$ rake -vT
$ rake secret:generate

リポジトリからはsecret_token.rbは削除した

でも、よく考えると…

これって、デプロイする度に再起動しないといけない?…(´・ω・`)

Herokuだと環境変数に登録しておくのもアリだ

$ heroku config:add SECRET_TOKEN=xxxxx

config/initializers/secret_token.rb
#Hogeはアプリ名
Hoge::Application.config.secret_token = ENV['SECRET_TOKEN']

なんか良い方法ないか?w

( ̄(エ) ̄)彡☆

2012年12月20日木曜日

Rails BulkInsert and Destroy #rails

( ̄(エ) ̄)彡☆

環境
Ruby 1.9.3-p327
Rails  3.2.2
Postgresql 9.2.2

以前、Rails CSVインポートっての書いたけど…
def create
  require 'csv'

  if params[:upload_file].blank? == false
    reader = params[:upload_file].read

    CSV.parse(reader) do |row|
      file = File.new
      file["field_name"] = row[0]
      file.save ← ここがマズイ
    end
  end
end

これだと鬼の様にInsertクエリが走ります…

なので、BulkInsertを使いましょうw

Gemfile
gem "activerecord-import", ">= 0.2.0"

修正後
def create
  require 'csv'

  if params[:upload_file].blank? == false
    reader = params[:upload_file].read
    
    files = []
    CSV.parse(reader) do |row|
      files << File.new(field_name: row[0])
    end

    File.import(files)
  end
end

これでInsertクエリが一発走っておしまいヘ(^o^)ノ

10,000レコードのインポートで5218.9ms

実はdestroy_allでも同じ現象…

鬼の様にDeleteクエリが走ります…

こんな感じ?
ids = []
@files = File.all
@files.each do |f|
  ids << f.id
end
File.delete_all("id in (#{ids.join(',')}) ")

ちょっと強引すぎるか…( ; ゚Д゚)

1628.5ms!

これでSelect, Delete, Insertのクエリがそれぞれ一回だけ実行されるようになった

ツッコミ大歓迎ヘ(^o^)ノ

2012年12月5日水曜日

Rails Tutorial Chapter3 Title test does not work #rails

Listing 3.17
it "should have the right title" do
 visit '/static_pages/home'
 page.should have_selector('title', :text => "Ruby on Rails Tutorial Sample App | Home")
end

Capybara2.0.1 does not work ( ̄0 ̄)
Also found "", which matched the selector but not all filters.

Updated
it "should have the right title" do
 visit '/static_pages/home'
 should have_xpath("//title[contains(.,'Ruby on Rails Tutorial Sample App | Home')]")
end

It Worked ヘ(^o^)ノ

or
gem 'capybara', '1.1.2'


2012年11月5日月曜日

Railsチューニングでベンチマークとってみた

( ̄(エ) ̄)彡☆

プロ生でRailsチューニングでベンチマークとればいいのにー

って、声があったからベンチマークとってみたー

WEBrick
time = 3477ms

Unicorn
time = 1567ms

Rack Middleware
config.middleware.delete 'Rack::Cache'
config.middleware.delete 'Rack::ETag'
config.middleware.delete 'Rack::ConditionalGet'

time = 776ms

GC とめ
time = 751ms

やっぱりRack Middlewareをとめるのがきいてるなー

2012年11月4日日曜日

プログラミング生放送勉強会 第18回@大阪 #pronama 参加してきたー

( ̄(エ) ̄)彡☆

おやつ係だったので買い出し行ってきましたー

阪急梅田に出来たHAPPY Turn's

開店時間の10時に行けば楽勝…

まさかの2時間半待ちΣ(゚Д゚;エーッ!

先頭は8時過ぎから並んでたらしい…

結局2時間またなアカンのかw

Untitled
目の前でパウダーかけてくれますヘ(^o^)ノ

無事購入して会場へ=͟͟͞͞( •̀д•́)))

Untitled
会場では受け付けでみなさんをお出迎えw

《セッション内容》

NFC で始めるイベント出欠管理
スピーカーは@treby006さん

空のテンプレートから始める Windows ストアアプリ
スピーカーは@hatsune_さん

ここまでは@to_uedaと受付でRubyのお話してましたヘ(^o^)ノ

Delphi で Win/Mac クロスコンパイル
スピーカーは@tworksさん

クラウディア窓辺のタダではじめる Windows Azure(入門編)
スピーカーはなんと@Claudia_Azureさん キタ━(゚∀゚)━!

やさしくAzureを教えてくれましたヘ(^o^)ノ

ぐだぐだでしたが( ; ゚Д゚)
LTやってきましたー


Railsチューニングとコミュニティのお話

クラウディアさんと名刺交換できなかったのが悔やまれる…

でも、勉強会はやっぱり楽しいー

スタッフの皆さん、参加していだだいた皆さん、スピーカーの皆さん

祝日でしたが、(❤ฺ→∀←) おつかれ♫♬ (→∀←❤ฺ)

次回は12/22 プロ生勉強会 第19回@東京(予定)です

ではまたー

2012年10月15日月曜日

RailsでArelを使ってみたよ

( ̄(エ) ̄)彡☆

Railsの検索でクエリをゴリゴリ書くのもいいが…

あんまりクールでないwww

なのでArelを使ってみる

GitHub → Arel

例えばOR句を使いたい場合
users = User.arel_table
User.where(users[:name].matches('%murajun1978%').or(users[:admin].eq(true))

生成されたSQL
SELECT "users".* FROM "users" 
WHERE (("users"."name" LIKE '%murajun1978%' OR "users"."admin" = 't'))

LIKE句を使いたかったのでmatchesを強引に使いました (。・x・)ゝ

AND句はorをandに変えて使ってね

Rails 【モデル】 scopeを使って検索してみたよ

( ̄(エ) ̄)彡☆

コントロールに書くと…
@user = User.where(:name => params[:name])

でも、こういうのはモデルに書きたいヘ(^o^)ノ

Userモデル
class User < ActiveRecord::Base
  scope :search, lambda { |name|
    where("name = ?", "#{name}") 
  }
end

使い方はこんな感じ
@user = User.search

すっきりしたねーヾ(╹◡╹✽三✽╹◡╹)ノ″

んじゃ、複数の場合は…

Userモデル
class User < ActiveRecord::Base
  scope :search, lambda { |name, admin|
    where("name = ?", "#{name}").where("admin = ?", "#{admin}") 
  }
end

こんな感じでwhere文をくっつける事もできるのだー

しかも…
@user = User.search(params[:name], nil)

引数がnilでもそのまま書けるΣ(゚Д゚;

Railsなしでは生きて行けませんwww