Ruby on Rails (3.x >= 3.2.9) のためのブログです (どっちかというと社内ブログ的な感じで、基礎から書いてきます) 。
12月
20
Comments

Railsで、「ファイルをアップロードし、そのファイルのパスをデータベースに保存する」という処理を行いたい場合、CarrierWave を使えばできます。 ① CarrierWave をインストール まず、Gemfileに以下を追加 gem 'carrierwave' # これを追加 次に、以下のコマンドを実行 $ bundle install ② アップロード用のクラスを作成する $rails generate uploader image このコマンドを実行すると、app/uploaders/image_uploader.rb (ImageUploaderクラス) が作成されます ③ 画像アップロード用に、モデルを定義 images というテーブル (モデルはImage) に、imagename というカラム名で、ファイル名を管理するとします。 つまり、imagename

[...]

Categories: , , ,
12月
15
Comments

ポリモーフィック関連について、今回は解説します。 まず、ポリモーフィック関連とは、以下の図に示すように、type によってリレーション先の親モデルが変わるようなものと子の関係です。 Rails では、***_id (int)と、***_type (string(255)) によって、これを実現しています。 このようなデザインのDB設計をしてる場合の、MigrationファイルやModelの作成方法は以下のようになります。 ① ポリモーフィック関連のテーブルのMigrationファイル class CreateItems < ActiveRecord::Migration def change create_table :items do |t| t.references :itemable, :polymorphic =>

[...]

Categories: , ,
12月
13
Comments

Model, View, Controller のフレームワークに、サービス層を付け加えたほうがいいのでは〜?という記事をこの前書きました。 RAILSでのアプリケーション作成 - MVC そこで、 app/services 以下に指定した名前のサービスクラスを作成 test/unit 以下に作成したサービスに対するTest用クラスを作成 以上の機能を持ったrakeコマンドを作成しました。 以下のスクリプトを, lib/tasks の中に作成してください (ファイル名は service.rake) # encoding: utf-8 # サービスクラスを作成する # app/services以下 # # rake service:create SERVICE="hoge" # このコマンドで、app/services/hoge_service.rbが作成

[...]

Categories: , , , ,
12月
12
Comments

独自の rakeタスクを作成するには、以下の手順を。 ① lib/tasks の中に、hoge.rake を作成 例えば、以下の様なファイルを作成します # lib/tasks/hoge.rake namespace :hoge do task :piyo do # ENV['opt'] で、rake hoge:piyo opt="[文字]" で指定した[文字]の部分を取得できます # ここに実行したい処理を記述 end end ② rakeコマンド実行 あとはコマンドを実行するだけ $ rake hoge:piyo opt="オプション

[...]

Categories: , , ,
12月
11
Comments

Rails3 において、Pagenation 処理を行う場合、Kaminari という gem を使うのが良さそうです。Kaminari については、[ コチラ : Kaminariの使い方 Rails3時代のpaginationの標準候補 ] の記事にとてもわかり易くまとめられていました。 ① gem でインストール $ gem install kaminari ② Gemfile に以下を記述。 gem 'kaminari' ③ コマンド実行 $ bundle install 使い方は先程の参考サイトを。

[...]

Categories: , , ,
12月
10
Comments

Rails は MVCのフレームワークで、 Model : ビジネスロジックを書く場所 View : データを、ユーザーにどんな形で見せるかを記述 Controller : ユーザーの操作に対して、Modelをコントロールする 部分に分かれています。 ちなみに、そもそもMVCフレームワークの元の概念は....とかのMVC論争には、そこまで触れる気はありません。。 Railsでアプリケーションを作成する際には、この MVC に沿って開発をするのですが、その際に注意することや、自分が開発する上での方針を書いておく。(何がよくて何が悪いというより、ただのメモとして見てくれたら嬉しいです) Controllerはできるだけ薄くする ビジネスロジックなどはModelに記述する ( Helperで、Modelをあつかっても良い。それで逆に複雑化するならやめておく ) 複数のModelにまたがるような処理だとかは、Service層を作るのもありかも

[...]

Categories: , , , , ,
12月
10
Comments

Unit Testは、以下のコマンドで実行できます。 # test/units 以下ファイルすべてをテスト $rake test:units # 指定したファイルのみテスト $rake test:units TEST=[テストするスクリプトへのパス] ① まず最初にテスト用のデータベースを作成 # 現在のschema.rbの情報をもとにテストDB作成 $ rake db:test:load # テストDBの削除は以下のコマンド $ rake db:test:purge # (他にもいくつか作成用コマンドがあります) ちなみに、texture で記述したテストデータが展開されます。 ② テストの内容を作成 たとえば、userモデルのスクリプトのテストをしてみることにします。 そのために、まずテスト用のスクリプトを編集します。model を作成した際に、test/unit

[...]

Categories: , , , ,
12月
10
Comments

データベースにテストデータを入れたい場合、fixture というものを使用します。 以下の様に model を作成した場合、test/fixtures 以下に、xxx.yml が作成されます。 $ rails generate model user invoke active_record create db/migrate/20121204111949_create_users.rb create app/models/user.rb invoke test_unit create test/unit/user_test.rb create test/fixtures/users.yml このファイル (test/fixtures/users.yml) に、テストデータを記入します。 以下がその例 #

[...]

Categories: , , , ,
12月
09
Comments

Ruby on Rails 3 ポケットリファレンス [単行本(ソフトカバー)] 山田 祥寛 (著) 13年のロングセラーシリーズ・ポケットリファレンスにWebアプリケーションフレームワークの新定番であるRails3が新登場。逆引き形式で目的の情報をすぐ探せて、サンプルコードを見ながら具体的な実装のイメージがつかめます。Rails3.1以降に対応、標準ライブラリとなったjQueryやCoffeeScriptの話題もフォローしています。定番解説書である『Ruby on Rails 3 アプリケーションプログラミング』の著者・山田祥寛氏による、現場で役立つ信頼の1冊。 とりあえず、この書籍オススメです。 Rails でやりたいことを簡単に検索できるし、かつ解りやすいため、最初に何か本を買って Rails を勉強したい!!ってひとにはこの本で十分じゃないかと

[...]

Categories: , ,
12月
08
Comments

Railsでトランザクション処理を実装する場合、その機能をActiveRecordが用意してくれています。 transaction do ..... end を使用すればOKなのです。 def hoge User.transaction do user1 = User.new user1.save! # save!メソッドは保存できない場合、例外ActiveRecord::RecordInvalidが発生 user2 = User.new user2.save! end #例外が発生しなかった場合の処理 render :text = "成功" rescue => e #例外が発生した場合の処理 render :text = "失敗" end 自動でロールバックしてくれま

[...]

Categories: , ,
12月
08
Comments

Rails で CSRF(クロスサイトリクエストフォージェリ) の対策を行う場合、 コントローラーで protect_from_forgery を、テンプレートで csrf_meta_tag を使用します。 そして、formを作成する時に、ビューヘルパーを利用してフォームを作成すればOKです(form_for / form_tag など) 以下、参考サイトです。 CSRFの対応について、rails使いが知っておくべきこ

[...]

Categories: , ,
12月
08
Comments

Rails のサーバーは以下のコマンドで起動できます。 $ rails server [name] [options] [name] mongrelやthinなど (WEBrick以外を指定したい場合のみ指定) [options] -p [portnum], --port=[portnum] ポート番号 デフォルト : 3000 -b [ipAddr], --binding=[ipAddr] バインドするIPアドレス デフォルト : 0.0.0.0 -d, --deamon デーモンとして起動する デーモンとして起動したrailsサーバーを停止する場合は、ps -ef | grep script/rails でプロセスを確認し、kill -9 [processID] を行う -e [env-name], --enviroment=[env-name]

[...]

Categories: , , ,
12月
07
Comments

model のアクセサメソッドについてメモメモ。 class User < ActiveRecord::Base attr_accessor :name end このように、Model に アクセサメソッドを定義して、 user = User.new user.name = "名前" user.save のようにして永続化をしようとしたが、name カラムの値がDBに保存されなかった。 ActiveRecord を継承してるので、そのActiveRecord 側がなんかしちゃうのかな。。。 ちょっと詳しく調べる時間ないので、後回しですが、attr_accessor の記述を消して普通に user = User.new user.name = "名前" user.save をやるだけでいけま

[...]

Categories: , ,
12月
07
Comments

Model では、attr_accessible と attr_protected というクラスメソッドがあります。 これらについて。 class User < ActiveRecord::Base attr_accessible :name, :email attr_protected :id end attr_accessible は、代入を許されている (publicのの様なもの) カラムで、attr_protected は、代入を許さない (newや@params['user']['name'], attribute=.. のようなもの) カラムを指定するもの。 attr_accessible に指定しないものは、 attr_protected になる様です。 ちなみに、メソッドを介してのカラムの値の変更は大丈夫です

[...]

Categories: , , ,
12月
07
Comments

Ruby の コーディング規約に関しては、以下の記事を参考にするとよさそうです。 http://bojovs.github.com/2012/04/24/ruby-coding-style/ http://shugo.net/ruby-codeconv/codeconv.html http://www.loveruby.net/w/RubyCodingStyle.html 備考: rubyはメソッド呼び出しの際に括弧を省略できるが、p や attr_accessor など慣例的に丸括弧を省略する場合以外、丸括弧を書く 一応、rdocに沿ったコメントを書く など、意識してけばいいのではないでしょうか。

[...]

Categories: , ,
12月
07
Comments

migrationファイル (db/migration 以下) は、[タイムスタンプ]_create_users.rb の様に、タイムスタンプがファイル名の先頭についています。 このファイルは、以下のコマンドを利用すれば簡単に作成できます。 $ rails generate migration [hogehoge] invoke active_record create db/migrate/20121206214547_[hogehoge].rb [hogehoge] に指定した文字列とタイムスタンプをつなげた名前のファイルが、db/migrate 以下に作成されます。 ※ rails generate model [mogera] のように、model を作成した場合は、rails generate migration create_[mogera]

[...]

Categories: , , , , ,
12月
05
Comments

Javaには JavaDocとよばれる、JavaのソースコードからHTML形式のAPI仕様書を作成してくれるものがありますよね。 ①ドキュメントの生成方法・コマンド ruby では RDoc と呼ばれるものがあります。 今回は Rails で RDocを使用する方法を書いておきます。 # 現在のアプリのドキュメントファイルを作成する $ rake doc:app # アプリのドキュメントファイルを削除する $ rake doc:clobber_app # 現在あるドキュメントを強制的に上書きする $ rake doc:reapp # railsに関するドキュメントを作成する $ rake doc:rails ほかは [ rakeのタスク一覧 ] に書いてあるので見てみて下さい。 ②RDoc の書き方 次に, RDoc の書き方については、以下の記事が参考になります。 http://tech.feedforce.jp/review_rdoc.html http://ruby.gfd-dennou.org/tutorial/rdoc/ http://webos-goodies.jp/archives/51072281.html どうせコメントを書くなら、少し

[...]

Categories: , , ,
12月
05
Comments

以下のコマンドで、一覧を見れます。 $ rake -T rake about # List versions of all Rails frameworks and the environment rake assets:clean # Remove compiled assets rake assets:precompile # Compile all the assets named in config.assets.precompile rake db:create # Create the database from DATABASE_URL or config/database.yml for the current Rails.env (use

[...]

Categories: , , ,
12月
04
Comments

modelの作成方法についてメモを残しておきます。 Railsにはscaffoldという機能があり、コレを使うと作成・更新・一覧表示などの機能をもったものを自動で作成してくれます。(詳細はググって下さい) ただ、ここではこのscaffoldは使用しないものとします。 http://kosuke-komiya.info/wiki/index.php?RubyOnRails_Types : こちらに、RailsのModelで使用出来るデータ型がわかりやすく載っています それでは。Userモデルを作成してみます ① モデル作成 # userモデルの作成 $ rails generate model user invoke active_record create db/migrate/20121204111949_create_users.rb

[...]

Categories: , , , , ,
12月
03
Comments

基本的には以下の構成 (http://kinjo.github.com/ojag-rails/ を参考にしてます) |-- app # アプリのソースコード | |-- assets # | | |-- images # 画像ファイル | | |-- javascripts # javascript(CoffeeScript) ファイル | | `-- stylesheets # stylesheet(SCSS) ファイル | |-- controllers # コントローラファイル |

[...]

Categories: , ,
12月
03
Comments

[Ruby on Rails 3.1] lib ディレクトリ以下に自作ライブラリを置いて autoload を有効にする設定方法 Rails3.2系のディレクトリ構造はここ参照 Modelやmigrationの仕組みはここがわかりやすいかもで

[...]

Categories: , ,
12月
03
Comments

次に、Railsのプロジェクトを作成してみます。 RailsからMySQLを使用する場合、 http://www.oyabunn.com/wordpress/archives/60 こことか参考になるかも # 使用するデータベースとしてmysqlを指定 $ rails new sample --database=mysql ちなみに、データベースを指定しない場合はSQLiteになります。 プロジェクトが作成されたら、config/database.ymlを編集して(Host, User, Passwordを指定)、 実際に起動してみます # サーバー起動 $ cd sample $ rails server するとこんなエラーが。。。。 /Users/yusuke/.rbenv/versions/1.9.3-p0/lib/ruby/gems/1.9.1/gems/mysql2-0.3.11/lib/mysql2.rb:9:in

[...]

Categories: , , ,
12月
03
Comments

Mac OS X (10.7 Lion) ローカルにRuby on Railsをインストールします。 まず、homebrew をインストールしてない場合は、インストールをしておいて下さい (homebrewは便利なので、とりあえずインストールをおすすめします。) ① homebrew で rbenv, ruby-build のインストール $ brew update $ brew install rbenv $ brew install ruby-build ② パスを通す $ echo 'eval "$(rbenv init -)"' >> ~/.bash_profile $ . ~/.bash_profile ③ rbenv で ruby install $ rbenv install 1.9.3-p0 $ rbenv global 1.9.3-p0

[...]

Categories: , ,