さくっとDBにアクセスするバッチやスクリプトを、rubyで書きたいなぁと思うことはないですか? Railsで使われている O/Rマッピングのライブラリ「ActiveRecord」ですが、Railsではなくただのrubyプログラムから単体で使うことが出来ます。 今回は、「ActiveRecord」を単体で使用して、MySQLにアクセスするスクリプトを書いてみます。 環境 ruby 1.9.3 activerecord 3.2.8 ActiveRecordを使ってみる ActiveRecordをインストール $ gem install activerecord MySQLに接続するためのアダプタインストール $ gem install mysql2 下のようなエラーが出る場合、 Building native extensions. This could take a while... ERR
(Last Updated On: 2018年10月7日)Railsで多用されているActiveRecordのインジェクションパターンを簡単に紹介します。出典はrails-sqli.orgなのでより詳しい解説はこちらで確認してください。特に気をつける必要があると思われる物のみをピックアップしました。 Exists?メソッド User.exists? params[:user] params[:user]などの使い方は危険です。RailsはPHPなどと同様にuser[]というパラメーターで配列化します。 ?user[]=1 が入力の場合、 SELECT 1 AS one FROM "users" WHERE (1) LIMIT 1 となり不正なクエリが実行されます。 Calculateメソッド CalculateメソッドはSQLの集約関数を実行するメソッドです。average、calcula
Overview The Ruby on Rails web framework provides a library called ActiveRecord which provides an abstraction for accessing databases. This page lists many query methods and options in ActiveRecord which do not sanitize raw SQL arguments and are not intended to be called with unsafe user input. Careless use of these methods can open up code to SQL Injection exploits. The examples here do not inclu
Rubyとは 説明 手軽なオブジェクト指向プログラミングを実現するための種々の機能を持つオブジェクト指向スクリプト言語 Rubyの特徴 シンプルな文法 普通のオブジェクト指向機能(クラス、メソッドコールなど) 特殊なオブジェクト指向機能(Mixin、特異メソッドなど) 演算子オーバーロード 例外処理機能 イテレータとクロージャ ガーベージコレクタ ダイナミックローディング(アーキテクチャによる) 多くのUNIX上で動くだけでなく、DOSやWindows、Mac、BeOSなどの上でも動く 変数 特徴 JavaScriptと異なり、varは不要 セミコロン(;)も不要 予約語は、自動的にダブルクォートで囲まれる 例 数値と文字列 特徴 数値や文字列はすべてオブジェクトとして扱われる 変数の型は自動的に変換されるので意識する必要はない 数値 足し算やかけ算の結果、Fixnumの値を超えた場合は、
Railsのバージョンは3.2.8時点のものです。(2012/8/21追記) 前回の冒頭で書いてたので、Rails版も書いてみようと思う。 要は、困ったらリファレンスマニュアルのそれっぽいところ見れば、 Ruby/Railsは大体解決してくれるよ(しかもスマートに)って感じなので、 悩んだらハマる前に一回公式に帰るのもいい手段だと思ってます。 でも、RailsのAPIリファレンスどこに何書いてるか分かりづらいと思う。 例えば、has_many関連には、実は:after_addとか:before_removeとか、 その手のコールバックをProcで渡せるんだけど、メソッドの説明の所に書いてないんよね。 上の方のクラス全体の説明の所にAssociation Callbackって項目があって、 そこで地味に説明されてたりとか。 この辺、もしかしてpull request候補かな。 メインはAct
ActiveRecordはRubyOnRailsのO/Rマッパーとして有名ですが、Railsに依存しているわけではなく単体で使えます。 DBを用意する なにはともあれ、DBがないと始まらないので適当に用意します。 create database ar; use ar; create table users ( id int unsigned not null auto_increment, name varchar(50), age int, primary key (id) ); ユーザ名と年齢を管理するテーブルってことで。 DBへの接続とマッピング require 'rubygems' require_gem 'activerecord' # ARで接続 ActiveRecord::Base.establish_connection( :adapter => 'mysql', :hos
class CreateProducts < ActiveRecord::Migration[7.0] def change create_table :products do |t| t.string :name t.text :description t.timestamps end end end class CreateProducts < ActiveRecord::Migration[7.0] def up create_table :products do |t| t.string :name t.text :description t.timestamps end end def down drop_table :products end end カラムをバージョンアップ 説明 データベースのカラムをバージョンアップ upメソッドはロールバックできない処理をする際に主に使用
Rails 3のActiveRecordはArelというDSLを使ってクエリを生成するのだが,単純なクエリであればともかく,複雑なクエリを実行しようと思うと色々と四苦八苦しないといけなくなる. # この辺はどのORMでも同じだけど 今回,複雑なSQL文を作る必要が出たのでその方法をまとめておく. やりたいことは,以下のような感じ.よくあるたくさんの条件をORで繋いで検索する様なケース. def hoge # 条件1の作成 # 条件2の作成 some_array.each do |h| # 条件3〜nの作成 end # 条件1〜nをORで接続してreturn end これをやろうとして, Hoge.where(CONDITION1).or(CONDITION2).or(CONDITION3) ということが出来れば良かったのだが,これはできない.正しくは,scopedを使って, conds =
2011年08月25日16:55 カテゴリrailsactiverecord Rails3のActiveRecodeで複数のwhere条件をORで書く Rails3になってからArelが導入されてnamed_scopeが便利だなぁ〜と思いつつも、where条件をORで接続するにはどうすんだ?って ことで調べてみた。 ■今回の要件 1.Employeeテーブルから名前(漢字)で検索できる。 2.Employeeテーブルから名前(カナ)で検索できる。 3.カナでも漢字でも検索できる。 4.検索対象フィールド(姓、名、セイ、メイ)を動的に指定できる。 例えばEmployeesテーブルが以下のよう場合 class CreateEmployees < ActiveRecord::Migration def self.up create_table :employees do |t| t.string
メモ。 http://wiki.rubyonrails.com/rails/pages/HowToUseRailsWithoutADatabase RailsでDB(ActiveRecord)を利用しない場合の設定 - 与太郎プログラマの日記 MacにRailsをゼロからインストールする一番簡単な方法:Kenn's Clairvoyance - CNET Japan つまりconfig/environment.rbで Rails::Initializer.run do |config| config.frameworks -= [ :active_record ] を入れて、あとtest系を少し修正。 但しRails2.0以降はデフォルトのDBがSQLite3になったので不要?らしいが・・・。
転載元 http://funk.exblog.jp/m2005-02-01#2082044 vendor/activerecord/README Active Recordは、ビジネスオブジェクトとデータベーステーブルとを接続し、ロジックとデータをひとまとまりとして表現する永続的なドメインモデル(振る舞いとデータをカプセル化した、ドメインのオブジェクトモデル)を生成する。これは、Martin Fowlerによって記述された同名のO/Rマッピング(ORM)パターンの実装である: 「データベースのテーブルやビューの列をラップし、データベースアクセスをカプセル化し、ドメインロジックを追加するオブジェクト」 アソシエーション(関連付け)とインヘリタンス(継承)の欠如という大きな問題を取り除いたことが、Active Recordsのオリジナルパターンへの大きな貢献である。Active Recordは
class Member < ActiveRecord::Base has_one :favorite end class Favorite < ActiveRecord::Base belongs_to :member end has_one で関連を定義すると、以下のメソッドが自動的に定義されます。(belongs_to 側にも同様のメソッドが定義されます)。 (関連名)(force_reload = false) : 関連するオブジェクトを取得します。 (関連名)= : 関連するオブジェクトを代入します。(自動的にDBへ保存されます) (関連名).nil? : 関連するオブジェクトが存在しないことを確認します。(なければ true を返す) build_(関連名)(attributes = {}) : 関連するオブジェクトを作成して返します。(DBへの保存はされません) create
ActiveRecordのfind()では、:includeオプションを指定することで、関連テーブルの情報をまとめて読み込むことができます。 :includeオプションの指定方法をまとめました。 1つの関連先テーブルを読み込む :include => :foo 複数の関連先テーブルを読み込む :include => [:foo, :bar] 多段の関連を一度に読み込む :include => {:foo => :bar} さらに多段の関連を一度に読み込む :include => {:foo => {:bar => :baz}} 関連先テーブルから複数の関連テーブルを読み込む :include => {:foo => [:bar, :baz]} 以上を組み合わせて読み込む :include => [{:foo => {:bar => :baz}}, :hoge]
このエントリでは,Ruby on Rails (以下 Rails)の ActiveRecord モデルテストについて,1) どこの何をテストすればよいか,2) どのようにテストを書けばよいか,のガイドラインを示します.このガイドラインは Rails 公式のものではなく,id:passingloop が使っている私的なものです.疑問・質問・批判・間違いの指摘はページ下部のコメント欄までお願いします. はじめに Rails は TDD/BDD サポートが充実した Web アプリケーション開発フレームワークです.Rails で使える Test::Unit や RSpec などといったテスティングフレームワークの使い方に関する解説も豊富にあります.しかし,「どこをどうテストすればよいのか」についての解説は,「使い方」の解説と比較して少ないように思います.もっとも,テスト一般についてどう書くかはアプ
Active Record Active Record objects don’t specify their attributes directly, but rather infer them from the table definition with which they’re linked. Adding, removing, and changing attributes and their type is done directly in the database. Any change is instantly reflected in the Active Record objects. The mapping that binds a given Active Record class to a certain database table will happen au
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く