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

articles ------ articles_tags ------ tags というように、記事 (Article) と タグ (Tag) を中間テーブルを使って結び付ける場合, その中間テーブルの名前は, それぞれのテーブル名を辞書順にアンダースコアでくっつけたものを使用します。 なので、articles テーブルと tags テーブルの中間テーブルは、articles_tagsです。 (逆に tags_articles としちゃうとダメです!!!) 気をつける

[...]

Categories: , ,
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: , , ,