Ruby on Rails
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
単語検索
|
最終更新
|
ヘルプ
|
ログイン
]
開始行:
* [[Ruby on Rails]]
1.2と2.0が混在しているなー ちゃんと分けないと...~
2.2がでましたね。Ruby 1.9に対応したか!速くなるかな?~
[[国際化されたRails 2.2登場、スレッドセーフとRuby 1.9対応...
#contents
** NEWS
2008/10/22~
[[Rails、PHPもサポートするフリーの統合開発環境「NetBeans ...
** 環境
http://rubygems.rubyforge.org/wiki/wiki.pl?RubyGemsよりRu...
wget http://rubyforge.org/frs/download.php/5208/rubygems...
unzip rubygems-0.8.11.zip
cd rubygems-0.8.11
ruby setup.rb
あら?つながらなくなってますね。上記URLはつながらなくなっ...
wget http://rubyforge.org/frs/download.php/17190/rubygem...
tar xzvf cd rubygems-0.9.2
ruby setup.rb
いまは1.0.1ですね。(2007-12-20)ではRailsもインストールし...
gem install rails --include-dependencies
最新にする場合は、
gem update rails
windowsは[[Railsインストール>http://www.rubylife.jp/rails...
まず、RubyGemsをhttp://docs.rubygems.org/のダウンロードよ...
rubyのディレクトリに展開後、(例:H:\ruby\rubygems-1.0.1)
cd H:\ruby\rubygems-1.0.1
ruby setup.rb
この後進んで、
As of RubyGems 0.8.0, library stubs are no longer needed.
Searching $LOAD_PATH for stubs to optionally delete (may...
...done.
No library stubs found.
H:\ruby\rubygems-1.0.1>
で終わり。[[zlib.dll>http://www.rubylife.jp/railsinstall/...
さてgemがはいったので、railsをいれましょう。
gem install rails --include-dependencies
んーSSLEAY32.dllやLIBEAY32.sllがないといわれましたね。[[O...
Installing ri documentation for rake-0.8.1...
Installing ri documentation for activesupport-2.0.2...
Installing ri documentation for activerecord-2.0.2...
2.0になっていたのか。
ほかに[[iconv>http://wiki.rubyonrails.com/rails/pages/ico...
readlineは解凍して、binにreadline.dllをコピーします。でな...
c:/ruby/lib/ruby/1.8/i386-mswin32/readline.so: 126: 指定...
- c:/ruby/lib/ruby/1.8/i386-mswin32/readline.so (LoadE...
とかってエラーがでます。
ではDEMOを動かしてみましょう。適当なディレクトリで、
rails demo
cd demo
ruby script/server
デフォルトでポート3000をつかってWEBrickが起動しますので、...
ruby script/generate controller コントローラ名
とするとMVCのコントローラが作成されます。コントローラ名は...
また実行して
no such file to load -- sqlite3
ってエラーが出た場合は、
gem install sqlite3-ruby
とします。それでもエラーが出る場合は、http://sqlite.org/d...
mysqlでも同じようなエラーがでました。leopardの場合は、
env ARCHFLAGS="-arch i386" gem install mysql -- --with-m...
**アップデイト
gem update --system
gem update
**Apache
***FastCGI
[[Apache]]のFastCGIを参考に先にいれて、実行したら、
RailsFCGIHandler(NameError)
とlog/error_logに出力されていたので、先を参考に(参考http:...
gemは下のRuby on Railsを参考にしてください。
gem install fcgi
一応httpdを再起動して、railsのプロジェクトを作ったら、そ...
#RewriteRule ^(.*)$ dispatch.cgi [QSA,L]
RewriteRule ^(.*)$ dispatch.fcgi [QSA,L]
また必要に応じて
#RewriteBase /test
を書き換えましょう。ここで私がはまった愚かなことがありま...
execle() failed: No such file or directory
や
(2)No such file or directory: FastCGI:
と表示され全く動きませんでした。cgiにしても動かない。これ...
dispatch.cgi
dispatch.fcgi
と2つのファイルがあります。cgi? そういえればwindowsでつ...
先頭に
#!c:/ruby/bin/ruby
なんだこれは...
#!/usr/local/bin/ruby
に書き換えると動き出しました.....
さてrails2を試してみると、ん?今度は
Invalid command 'RewriteEngine', perhaps mis-spelled or ...
なんてエラーがでているな。これはmod_rewriteが入ってなかっ...
FastCGI: comm with (dynamic) server "/www/public/dispatc...
これじゃよくわからんので、わからんときはWEBrickで
ruby script/server
とするとと、
/usr/local/lib/ruby/site_ruby/1.8/rubygems/custom_requir...
gettext入ってないないか。入れた覚えはないもんな。では入れ...
wget http://rubyforge.org/frs/download.php/31658/gettext...
gem install gettext-1.90.0.gem
やっと動きました。
さてこのままwebrootにコピーしちゃうと、configとかdbが丸見...
/webroot/usera/rubyを作ってそこに一式をコピーし(仮にプロ...
Alias /rubytest/ "/webroot/usera/ruby/rubytest/public/"
<Directory "/webroot/usera/ruby/rubytest/public">
Options +ExecCGI
AllowOverride all
Order allow,deny
Allow from all
AddHandler fastcgi-script .fcgi
</Directory>
ってやって、.htaccessのRewriteBaseを/rubytestとしてやりま...
参考:[[Ruby-GetText-Package>http://www.yotabanana.com/hi...
[[apache に redMine をインストールの Tips>http://wiki.enc...
***Mongrel
FastCGIは確かに早いが、評判がよろしくない。apache2で動い...
MongrelをいれてApacheと連携しましょう。
gem install mongrel --include-dependencies
とるすと、linuxなんで、
Select which gem to install for your platform (i686-linux)
1. mongrel 1.1.4 (x86-mswin32-60)
2. mongrel 1.1.4 (java)
3. mongrel 1.1.4 (ruby)
4. mongrel 1.1.3 (ruby)
5. mongrel 1.1.3 (i386-mswin32)
6. mongrel 1.1.3 (java)
7. Skip this gem
8. Cancel installation
> 3
Select which gem to install for your platform (i686-linux)
1. fastthread 1.0.1 (mswin32)
2. fastthread 1.0.1 (ruby)
3. Skip this gem
4. Cancel installation
> 2
としました。
gem install mongrel_cluster
も入れておきます。
ではちょっと起動して見ましょう。
mongrel_rails start -p 8000 -e production -c /webroot/ru...
引数の-pはポート、-eはRails environmentなんで指定しなけれ...
Rails requires RubyGems >= 0.9.4 (you have 0.9.2). Pleas...
ん?エラーだ。では指示通りに、
gem update --system
gettextは上記のFastCGIを参考にして、入れておきましょう。...
では終了してみましょう。
mongrel_rails stop -P /webroot/ruby/railstest/log/mongre...
さて動作したんで、次はリバースプロキシの設定です。mod_pro...
httpd.confに
ProxyRequests Off
<Proxy *>
Order deny,allow
Allow from all
</Proxy>
ProxyPass /railstest http://192.168.1.1:8000/railstest
ProxyPassReverse /railstest http://192.168.1.1:8000/rail...
を追加して再起動です。ではクラスタで複数起動するときは
mongrel_rails cluster::configure -N 2 -p 8000 -e product...
mongrel_rails cluster::start
です。apache2.2だと、mod_proxy_balancerが使えるので、参考...
<Proxy balancer://rails-app/>
BalancerMember http://192.168.1.1:8000/railstest ...
BalancerMember http://192.168.1.1:8001/railstest ...
</Proxy>
ってやるとバランサーになります。そういえば、
Ruby version is not up-to-date; loading cgi_multipart_eo...
ってエラーがでたことがあります。Rubyのバージョンが古いと...
[[Mongrel HOWTO>http://synth.jp/pg/2007/05/mongrel_howto....
[[Pound + Mongrel + Apache2.0 で Ruby on Rails!>http://re...
[[Mongrelを使ってみる。>http://kiyoeri.gotdns.org/joomla/...
[[CentOS5上でRuby on RailsアプリをApacheで動かす>http://d...
***LiteSpeed
速いらしいが調査中~
[[開発~運用Webサーバの比較>http://wota.jp/ac/?date=20060...
***[[Passenger>http://www.modrails.com/]]
本命はこいつか?Mongrelもいいですよ。
gem install passenger
passenger-install-apache2-module
インストールするとメッセージが表示されていますので、それ...
LoadModule passenger_module /Library/Ruby/Gems/1.8/gems/...
RailsSpawnServer /Library/Ruby/Gems/1.8/gems/passenger-1...
RailsRuby /System/Library/Frameworks/Ruby.framework/Vers...
<VirtualHost *:80>
ServerName www.yourhost.com
DocumentRoot /somewhere/public
</VirtualHost>
また[[Railsをさらに加速するテクノロジー「Ruby Enterprise ...
あるようで、1.9でRailsが動いてくれるまでなんとかしのぐか。
[[Passenger users guide>http://www.modrails.com/documenta...
[[チェック必須!Rails新時代の到来か?「Passenger(mod_rai...
**Railties
Railsを利用するためのユーティリティです。
script/generate ジェネレータ ひな形作成
model モデル
scaffold モデル名 コントローラ名 アクション名 # モデ...
controller コントローラ
migration マイグレーション
***migrate
テーブル作成
class CreateProducts < ActiveRecord::Migration
def self.up
create_table :products do |t|
t.column :title, :string, :limit=>100, :null => false
t.column :description, :string
t.column :image_url, :string, :limit=>200, :null =>...
t.column :price, :integer, :null => false
end
end
def self.down
drop_table :products
end
end
カラム追加
class AddDateAvailableToProduct < ActiveRecord::Migration
def self.up
add_column :products,:date_available,:datetime
end
def self.down
remove_column :products,:date_available
end
end
developmentではなくproductionに適用したい場合は、Eclipsの...
RAILS_ENV=production db:migrate
と打ち込んでリターンで実行されます。
[[Ruby on Rails で使えるデータ型>http://shin.moe-nifty.co...
[[MigrationによるDB管理>http://tam.qmix.org/wiki/Migratio...
**database.yml
どんな記述が追加出来るか調べていました。
development:
adapter: mysql
database: hoge_development
username: hogeuser
password: hogepass
host: 192.168.1.1
port: 3306
encoding: utf8
timeout: 5000
**environment.rb
***本番にDBを切り替える
# ENV['RAILS_ENV'] ||= 'production'
を
ENV['RAILS_ENV'] ||= 'production'
としてやります。
productionに設定すると、サーバー(httpd,mongrel等)を再起...
**ActiveRecord
参考:[[RubyOnRails を使ってみる 【第 3 回】 ActiveRecord...
[[ザリガニが見ていた...。>http://d.hatena.ne.jp/zariganit...
とても参考になります。このような方がお近くにおられれば.....
***項目命名規約
datetime _atで終わる
date _onで終わる
外部キー ターゲットのクラス名を小文字に変えて_idをつける
***テーブル名を変更する
def self.table_name() "tablename" end
もしくは
set_table_name "tablename"
***find
idでの検索では見つからない場合、エラーとなるので捕捉して...
product = Product.find(params[:id])
rescue ActiveRecord::RecordNotFound
flash[:notice] = "そんなIDはない"
とか、
product = Product.find(params[:id])
rescue => ex
flash[:notice] = ex.message
とか。
***トランザクション
ActiveRecord::Base::transaction() do
rascue
end
って書き方もできるのか..
http://underrails.seesaa.net/article/54762314.html
***has_many
べたで書いた場合
has_many :data1,
:class_name => "Data1",
:finder_sql => 'select data1.* from data1,dat...
ダブルクォーテーションではなくシングルクォーテーションで
またファインダメソッドを使って
has_many :specific_lineitems,
:class_name => "lineitem" do
def get(id)
find :all,:conditions=>['order_id = ?',id]
end
end
とかってしてやって、
p order.specific_lineitems.get(hoge)
としてやることもできる。
p order.lineitems.find(:first,:conditions =>["order_id=?...
でいいのですが。なんか変な感じだと思っていると、order.fin...
もちろんWHERE order_id = ?ではなく、LEFT OUTER JOINに。
仮に書けたとして、includeは書けるのか?
この辺は再調査だな。でもこんなの見つけてしまったというこ...
[[[Ruby on Rails]:include の JOIN 節に condition を追加し...
さて同容に孫でソートしたい場合はどうするのか?
has_many :lineitems,:include=>"lineitem",:order => "line...
としてやればできた。このorderは複数なのか。
[[has_manyでテーブル関連付けをしたときのDB更新>http://man...
[[ 関連とDBへの保存のタイミングを整理する>http://rails-re...
***find_by_sql
@table1 = Table1.find_by_sql("select table2koumoku1 from...
このfind_by_sqlはTable1と関係ないtable2でのsqlを使っても...
<% for table1 in @table1 -%>
<tr>
<td><%= h(table1.table2koumoku1) %></td>
</tr>
<% end -%>
これは逃げ道になりそう?またパラメータを渡す場合は、
aaaa = "11"
@table1 = Table1.find_by_sql("select table2koumoku1 from...
とか
@table1 = Table1.find_by_sql(["select table2koumoku1 fro...
他に
params = {}
params[:para2] = "2"
params[:para1] = "1"
find(:all,:conditions => ["code_id = :para1 and image_ur...
とすると
SELECT * FROM `products` WHERE (code_id = '1' and image_...
となるので、動的にSQLも書けることでしょう。
***connection.select_all
もうひとつの逃げ道として(逃げてばっかりですが..)、コント...
@datas = Table1.connection.select_all("select * from tab...
として、
<% @datas.each{|value| -%>
<tr>
<td><%= h(value['table2koumoku1']) %></td>
</tr>
<%} -%>
***destroyとdeleteの違い
deleteはコールバックと検証を迂回していき、直接deleteだけ...
destroyはすべて呼び出してくれます。ですので通常はdestroy...
***コード管理
漢には笑わせてもらいました。
[[いまこそ ARと外部キーについて考える (舞波)>http://wota....
***SQL確認
ActiveRecordが生成するSQLは、logディレクトリに出力されて...
それで確認できます。
***リンク
[[Rails RecipeBookはてな版(多対多の関連を設定する)>http:/...
[[「SQL書き方ドリル」のスキーマをActiveRecordで書く>http:...
**ActiveScaffold
[[優しいRailsの育て方>http://wota.jp/ac/?date=20071110]] ...
**GetText
エラーを日本語化したい場合、ActiveHeartよりこっちみたいな...
c:\ruby>gem install gettext
ERROR: While executing gem ... (Gem::RemoteFetcher::Fet...
接続済みの呼び出し先が一定の時間を過ぎても正しく応答...
ませんでした。または接続済みのホストが応答しなかったため...
ました。 - connect(2) (Errno::ETIMEDOUT)
getting size of http://gems.rubyforge.org/Marshal...
ん?なんだ。ファイアーウォールではじかれていたのか。では...
config/environment.rbの最初に
$KCODE='u' # u=utf s=Shift_JIS, e=EUC-JP
require 'jcode'
とし、最後に
require 'gettext/rails'
記述します。またapp/controllers/application.rbに
init_gettext "hogedom"
とテキストドメインの名前を記述しておきます。この名前はDB...
では翻訳文字を抽出する為にlib/tasksにrakeタスクをつくりま...
desc "Update pot/po files."
task :updatepo do
require 'gettext/utils'
GetText::ErbParser.init(:extnames => ['.rhtml', '.erb'])
GetText.update_pofiles(
"hogedom", #<<<<<<テキストドメインの名前
Dir.glob("{app,config,components,lib}/**/*.{rb,rhtml,...
"hogedom 1.0.0") #バージョン
end
desc "Create mo-files"
task :makemo do
require 'gettext/utils'
GetText.create_mofiles(true, "po", "locale")
end
では実行しましょう。
rake updatepo
するとpoディレクトリが作成され、その中にテキストドメイン...
これをpo/jaディレクトリを作成して、そこにコピーして、rail...
po/ja/railsproject.po
中を見ると、たとえば
#: app/models/product.rb:-
msgid "Product|Title"
msgstr ""
てな感じになっているので、
#: app/models/product.rb:-
msgid "Product|Title"
msgstr "タイトル"
とか日本語を入れてやります。設定後、
rake makemo
でエラー表示の時に項目名も日本語化されます。ではコントロ...
def create
@code = Code.new(params[:code])
respond_to do |format|
if @code.save
flash[:notice] = 'Code was successfully created.'
とかありますが、
flash[:notice] = 'Code was successfully created.'
を
flash[:notice] = _('Code was successfully created...
にしてやり、po/ja/railsproject.poに
#: app/controllers/codes_controller.rb:-
msgid "Code was successfully created."
msgstr "登録成功!"
としてやった後にrake makemoです。ではviewも
<p>
<%= f.submit 'Update' %>
</p>
を
<p>
<%= f.submit _('Update') %>
</p>
として、po/ja/railsproject.poに
msgid "Update"
msgstr "更新!"
これってmsgidってどこでも使えるですね。
ついでに、
class Code < ActiveRecord::Base
validates_presence_of :codekn,:code,:message => "%{fn}...
set_error_message_title("%{record}にエラーがある。", "%...
set_error_message_explanation("以下のエラーを確認せよ!...
end
とすると、
コードテーブルに2つのエラーが発生しました。
次の項目を確認してください。
* コードを入力してください。
* コード区分を入力してください。
ってメッセージが
コードテーブルに2個もエラーが...
ちょっとエラーが多いよ....
* コードは必須!
* コード区分は必須!
[[Ruby-GetText-Packageとは?>http://www.yotabanana.com/hi...
[[Ruby on RailsでRuby-GetText-Packageを使う>http://www.yo...
[[Ruby on Rails]2.0でRuby-GetTextを使う>http://d.hatena.n...
[[MacOS X10.5 Leopard環境にRuby-GetTextをインストールする...
[[GetTextで日本語化してみる。>http://d.hatena.ne.jp/zarig...
[[Ruby-GetText初体験その6【po ファイルと mo ファイル】>h...
**デバッグ
p オブジェクト名
とすると、コンソールに表示されれるので確認
<%= debug(params) %>
[[Railsでデバッグをする7つの方法>http://blog.s21g.com/ar...
**TIPS
***とりあえず
app/controllers/コントローラ名_controller.rb
class コントローラ名Controller < ApplicationController
def メソッド名
@test = "へへっへ"
end
end
メソッド名.rhtml
<html>
<head>
<title>ほほほほー</title>
</head>
<body>
<% 3.times do |count| %>
<h1><%= count %>ひっひ-</h1>
<%= @test %>
<% end %>
</body>
</html>
ここで、JSPみたいにRubyのコードを<%で埋め込んでますが、JS...
さてscaffoldをつかったらエラーがでました。Ruby on Rails2....
undefined method `scaffold' for AdminController:Class
その対象のプロジェクトのディレクトリで、
ruby script/plugin install scaffolding
ruby script/plugin install http://tools.assembla.com/svn...
ruby script/plugin install http://tools.assembla.com/svn...
また登録したとき
ActionController::InvalidAuthenticityToken
ってでる。これも2.0からで外部から来たリクエストであればは...
skip_before_filter :verify_authenticity_token
を追加してやるとskipしてくれます。
また実際に動かしてみると、登録時に日本語で落ちる場合は、
ActiveRecord::StatementInvalid in ...
config/database.ymlにencoding:の指定を追加しましょう。db...
script/generate scaffold book
から
script/generate scaffold book title:string price:integer
みたいにモデル名に後にフィールド名と:データ形式を追加する...
ん?生成されたコントローラを見ると、
respond_to do |format|
format.html # index.html.erb
format.xml { render :xml => @books }
end
ってあります。これって2.0からか。http://wota.jp/ac/?date=...
参考:[[■[Ruby on Rails]2.0のscaffoldから書き直してみる>h...
***ルートページの設定
config/routes.rbに
# You can have the root of your site routed with map.roo...
# map.root :controller => "welcome"
とかってありますので、
map.root :controller => "login", :action=>"login"
とかに変更して、public/index.htmlを消しておきます。
***部分テンプレート
頭にアンダーバー(_)をつける。
<%= render(:partial => "cartitem",:collection => @cart.i...
このような場合、_cartitem.html.erbという部分テンプレート...
またここではcollectionにセットをしている為、_cartitem.htm...
_cartitem.html.erbではこのcollectionの要素はcartitemでア...
<li><%= h(cartitem.quantity)%>個<%= h(cartitem.price)%>...
みたいに。このcollectionは他にもobjectとか指定可能
***cycle
<%= cycle(i, "") -%>
とかって書けば、一つとばしに出力されるのかなーと思ってい...
そりゃそうか。~
[[cycleヘルパーを使ってテーブルをストライプにする>http://...
***スクリプト
rails プロジェクト名 #プロジェクト作成
ruby script/server -e development(test,production) #サー...
ruby script/generate scaffold モデル名 コントーラ名 ※2.0...
ruby script/generate ajax_scaffold モデル名 コントーラ名...
ruby script/generate controller コントローラ名 #コント...
ruby script/generate model テーブル名 #モデル作成 単数...
ruby script/destroy ファイル削除
ruby script/runner メソッドをコンテキスト外で動かすこと...
***コールバッグフック
def before_create #保存前にフック
def after_create #保存後にフック
def before_destroy #削除前にフック
***チェック
必須チェック
validates_presence_of :項目
ユニーク
validates_uniqueness_of :項目
ここで項目が2つでユニークって場合で,たとえばhoge1の中でh...
validates_uniqueness_of :hoge2,:scope => :hoge1
ん?3つの場合はどうすんだ?
validates_uniqueness_of :hoge3, :scope => [:hoge1, :hoge2]
でいいのか。
数値チェック
validates_numericality_of :項目
[[ActiveRecord::Validations::ClassMethods>[http://techno....
[[Rails1.2.3 ActiveRecordで日付チェック(Validates Multipa...
***モデルにエラーを追加する場合
model.errors.add_to_base("エラーを追加")
***collection_select
<%= collection_select("user",user.code,@users,"code","na...
とかしてもうまくselecedがついてくれないので、とりあえず、...
def select_ext (strName,strCode,arrData,value,outdata,i...
strReturn = '<select id="'+strName+'_'+strCode+'" nam...
if isBlank == true
strReturn += '<option value=""></option>'
end
for oneData in arrData
if (strCode == oneData[value])
strReturn += '<option value="'+oneData[value]+'" ...
else
strReturn += '<option value="'+oneData[value]+'">...
end
end
strReturn += "</select>"
return strReturn
end
とかしてviewから呼び出して逃げてます.. はやく調べんと..
codes = Code.find(:all,:order => "id").map {|u| [u.nmnam...
f.select(:code_id,codes,{:include_blank => true})
と思ったらあっさりOK。
codes = Code.find(:all,:order => "id")
f.collection_select(:code_id,codes,:id,:code,{:include_b...
もOK。
f.collection_select(:code_id,Code.find(:all,:order => "i...
でもOK。書式は
collection_select(object, method, collection, value_meth...
なので、
f.collection_select(:code_id,Code.find(:all,:order => "i...
と指定できる。
[[collection_select>http://api.rubyonrails.org/classes/Ac...
[[Rails のコンボボックス(select)を生成する時の tabindex...
を参照
***複数のsubmitボタン (2.0)
とりあえず、やってみた。viewで
<%= f.submit 'ボタン1',:name=>'aa' %>
<%= f.submit 'ボタン2',:name=>'aa2' %>
で、controllerで
def update
unless params[:aa].nil?
p "aa != nil";
end
unless params[:aa2].nil?
p "aa2 != nil";
end
ただこれ、disable_withを指定するとparamsにセットされなく...
[[同一フォームに複数のイメージ送信ボタン>http://pirochin....
http://www.fdiary.net/ml/rails/msg/207 リンクきれてるな~
***複数モデルの保存 (2.0)
では早速サンプルを。ついでに複数ボタンも
<% form_tag(:action => 'update1') do %>
<% for @code in @codes %>
<%= text_field("code[]", 'nmname') %><br>
<% end %>
<%= submit_tag 'こっちだけ更新',:name=>'aa1' %>
<%= submit_tag 'なにもしない',:name=>'aa2' %>
<% end %>
この2行目でcodeを@codeとインスタンス変数にして、
3行目でcodeに[]をつけてやってます。するとhtmlは
<form action="/codes/update1" method="post">
<input id="code_1_nmname" name="code[1][nmname]" size="...
<input id="code_2_nmname" name="code[2][nmname]" size="...
<input id="code_3_nmname" name="code[3][nmname]" size="...
<input name="aa1" type="submit" value="こっちだけ更新" />
<input name="aa2" type="submit" value="なにもしない" />
</form>
と生成してくれます。ではcontrollerで
def update1
#p params
unless params[:aa1].nil?
params[:code].each{|key,value|
Code.update(key,:nmname => value[:nmname])
}
end
redirect_to :action => 'index'
end
とすれば更新できます。
params[:code].each{|key,value|
Code.update(key,:nmname => value[:nmname])
}
は
Code.update(params[:code].keys,params[:code].values)
と簡単に記述できます。~
form_forをつかってみましょう。ついでにform_forに適当なhog...
<% form_for :hoge, :url => {:action => 'update1'} do |f|...
<%= f.text_field :nmname %><br>
<% for @code in @codes %>
<%= text_field("code[]", 'nmname') %><br>
<% end %>
<%= submit_tag 'こっちだけ更新',:name=>'aa1' %>
<%= submit_tag 'なにもしない',:name=>'aa2' %>
<% end %>
でhtmlは
<form action="/codes/update1" method="post">
<input id="hoge_nmname" name="hoge[nmname]" size="30" ty...
<input id="code_1_nmname" name="code[1][nmname]" size="3...
<input id="code_2_nmname" name="code[2][nmname]" size="3...
<input id="code_3_nmname" name="code[3][nmname]" size="3...
<input name="aa1" type="submit" value="こっちだけ更新" />
<input name="aa2" type="submit" value="なにもしない" />
</form>
ちゃんとidやnameにhogeがつきました。ちなみにselectの場合...
<%= collection_select("code[]", 'code',@codes,:code,:nmn...
でいけるので、同じです。
参考~
[[1アクションで複数のモデルを同時に保存するには?>http://...
[[A Day In The Life(Railsで複数行更新)>http://blog.goo.ne...
[[ぺんちゃん日記(text_fieldなどのフォームを配列化する)>ht...
***paginate (1.2)
モデルに対しては
@pages, @users = paginate(:users, :order_by => 'usercode')
とかすればいいのだが、そんな単純なケースでない場合、Pagin...
per_page = 5
@tmp = Jikanwari.find_by_sql(["select count(*) as cnt fr...
count = @tmp[0].cnt.to_i
@pages = Paginator.new(self, count, per_page, @params['p...
@jkanwaris = Jikanwari.find_by_sql(["select * from jikan...
でviewに
<%= pagination_links(@pages) %>
***paginate(2.0)
[[classic_pagination を will_paginateに置き換えてみた。>h...
***フィルター
before_filter :メソッド名1 :except => :メソッド2
メソッドの呼び出し前にメソッド名1を呼び出します。ただしメ...
***フォームヘルパー
-link_to~
コントローラを指定したい場合
<%= link_to '登録', :controller => 'conta', :action => '...
さてRails2.0よりscaffoldで生成したhtml.erbを見ると
<%= link_to 'Edit', edit_flower_path(flower) %>
ってなっていたんです。なんじゃこれ?edit_モデル名_path?
[[Ruby on Rails/第11回勉強会 - RESTful Rails Development>...
また[[2.0のscaffoldから書き直してみる>http://d.hatena.ne....
[[2.0のmap.resourcesのオプション設定いろいろ>http://d.hat...
がとても参考になりました。[[RailsによるアジャイルWebアプ...
確認は
rake routes
で
-form_tag~
<%= form_tag :controller => 'conta',:action => 'touroku'...
さて2.0にすると、
undefined local variable or method `end_form_tag' for #<...
とエラーが..end_form_tagはなくなったんですね。endです。
-text_field_tag
<%= text_field_tag("koumokumei", atai,options = {:maxlen...
DBとか絡まない場合。
hiddenではhidden_field_tagがある。
-button_to~
formを含んだsubmitボタンを生成します。formを含んだ? サ...
<% for product in @products -%>
<%= product.title %><br>
<%= text_field_tag :title, product.title %><br>
<%= button_to "カーとに入れる",{:action=> :add_to_cart, ...
<hr>
<% end %>
このようにforでまわした場合は、どうなるかですが、
ひひい<br>
<input id="title" name="title" type="text" value="ひひい...
<form method="post" action="/store/add_to_cart/2?para1=1...
<div>
<input onclick="return confirm('Are you sure?');" type...
<input name="authenticity_token" type="hidden" value="...
</div>
</form>
<hr>
ほほー<br>
<input id="title" name="title" type="text" value="ほほー...
<form method="post" action="/store/add_to_cart/1?para1=1...
<div>
<input onclick="return confirm('Are you sure?');" type...
<input name="authenticity_token" type="hidden" value="...
</div>
</form>
<hr>
となりました。para1とかはちゃんとformにくっついているんで...
にないです。ということは自分だけで完結するformとsubmitを...
***コントローラ名取得
<%= controller.action_name%>
***Ajax
まずjavascriptsを使えるようにしておきます。javascriptsはp...
<%= javascript_include_tag :defaults %>
としておくと、
<script src="/javascripts/prototype.js?1204131898" type=...
みたいに生成されます。そして、
<% form_tag(:action => 'add_to_cart',:id=>product) do %>
とかなっているところを
<% form_remote_tag :url=>{:action=>:add_to_cart,:id=>pro...
とform_remote_tagに変更します。htmlは
<form action="/store/add_to_cart/3" method="post" onsubm...
parameters:Form.serialize(this) + '&authenticity_tok...
return false;">
とできてます。このAjax.Requestはprototype.jsですね。param...
送ってくれます。で、store_controllerのadd_to_cartメソッド...
後でちゃんと勉強するとして、add_to_cart.rjsの中身は
page.replace_html("cartid",:partial=>"cart",:object=>@ca...
とした場合、雰囲気はrenderに似ていますが、要は部分テンプ...
@cartは部分テンプレートで使うオブジェクトになります。
ということは、store_controller#add_to_cartのレンダリング...
こりゃ便利!さらにデバッグはfirebugを使って、NetのXHRを選...
ajax_scaffoldを使う場合
gem install ajax_scaffold_generator
***RJS
html.erbを
<%= javascript_include_tag :defaults %>
<div id="hoge">
hoho
</div>
として、pageをrjsに書いてどうなるかみてみます。
<%= javascript_include_tag :defaults %>
をしておくと、public\javascripts配下のjsをインクルードし...
<script src="/javascripts/prototype.js?1204131898" type=...
<script src="/javascripts/effects.js?1204131898" type="t...
<script src="/javascripts/dragdrop.js?1204131898" type="...
<script src="/javascripts/controls.js?1204131898" type="...
<script src="/javascripts/application.js?1203128030" typ...
後ろについている?1203128030は勝手につきます。おそらくブラ...
-replace_html~
page.replace_html("hoge",:partial=>"cart",:object=>@cart)
とすると、部分テンプレート_cartでhogeを置き換えます。ちな...
page.replace_html("hoge",:partial=>"cart",:object=>@cart...
とかしたら、部分テンプレート_cartで
<%= hogepara %>
とかで使えます。
-insert_html
page.insert_html :top,'hoge',"追加ーtop"
page.insert_html :before,'hoge',"追加ーbefore"
page.insert_html :after,'hoge',"追加ーafter"
page.insert_html :bottom,'hoge',"追加ーbuttom"
とすると
追加ーbefore
<div id="hoge">
追加ーtop
hoho
追加ーbuttom
</div>
追加ーafter
FirefoxのDOM Inspectorで確認しました。
page.insert_html :top,'hoge',content_tag("div", "追加ーt...
であれば、
<div>追加ーtop</div>
になります。ではテーブルに追加してみましょう。html.erbが
<table>
<thead><th>カラム名</th></thead>
<tfoot></tfoot>
<tbody id="target">
<tr><td>ああああ</td></tr>
</tbody>
</table>
として、
page.insert_html :bottom, 'target', content_tag("tr", co...
とすると行が増えていきます。
参考:[[Ajax でテーブルへの追加>http://d.hatena.ne.jp/malu...
またidとか指定する場合は、
page.insert_html :bottom, 'target', content_tag(:tr, con...
とできます。またシンボルに変更してます。
-update~
page['hoge'].update('aaaa').show
とすると、hogeがaaaaにupdateされます。
-effect~
ActionView::Helpers::ScriptaculousHelperを使ってやるとい...
page.visual_effect :grow, :tr1, :duration => 0.6
やidをいきなり指定して、
page[:currentitem].visual_effect :highlight,:startcolor ...
とかするとエフェクトをかけれます。
-sortable_element~
[[マウスで握って並べ替える。>http://d.hatena.ne.jp/zariga...
参考:~
[[RubyOnRails を使ってみる 【第 7 回】 RJS を使ってみる>h...
[[RJSでテーブルを操作する時の注意>http://d.hatena.ne.jp/y...
[[Rails RecipeBookはてな版>http://rails-recipebook.g.hate...
***セッションをDBに
rake db:sessions:create
とすると
create db/migrate/XXX_create_sessions.rb
と作成されるので、
rake db:migrate
でsessionsテーブルができてます。そしてconfig/environment....
# config.action_controller.session_store = :active_recor...
を
config.action_controller.session_store = :active_record_...
としてやります。さてサーバ再起動で、
c:/ruby/lib/ruby/gems/1.8/gems/activesupport-2.0.2/lib/a...
in `const_missing': uninitialized constant CGI::Session:...
from c:/ruby/lib/ruby/gems/1.8/gems/actionpack-2.0.2/lib...
in `const_get'
from c:/ruby/lib/ruby/gems/1.8/gems/actionpack-2.0.2/lib...
ってエラーが出た... なんじゃ んー
ではactiverecodeをつかってるいんだろうから、config/enviro...
require 'active_record'
を追加。どうかな?おっ動いた!では実際にアプリを動かして...
ActionController::InvalidAuthenticityToken in Store#index
No :secret given to the #protect_from_forgery call.
Set that or use a session store capable of generating it...
んー ではメッセージにしたがってActionControllerを見てみ...
protect_from_forgery # :secret => '11771fd07d754cc5380bd...
これのとことか。コメントをはずしてやって
protect_from_forgery :secret => '11771fd07d754cc5380bdho...
すると動き始め、sessionテーブルを覗くと保存されています。
消したい場合は、
db:sessions:clear
で
***Shift-JIS
Shitf-JISにこだわっているわけではなく、他の文字コードを使...
encoding: sjis
を追記した。またenvironment.rbに
$KCODE = 's'
を追加してみたが、文字化けは変わらなかったので、
application.rbを
class ApplicationController < ActionController::Base
# Pick a unique cookie name to distinguish our session...
session :session_key => '_rubytest_session_id'
before_filter :set_charset
private
def set_charset
headers["Content-Type"] = "text/html; charset=Shif...
end
end
にすると表示されるようになった。しかし、これでやるとmodel...
validates_presence_of :title,:message => "に空はだめ"
とか日本語にすると落ちてしまうので、before_filterをやめて...
$KCODE = 'SJIS'
ActionController::Base.default_charset = 'Shift_JIS'
としてやると日本語で出力されました。出力はされましたが、...
RUBY_HOME\gems\1.8\gems\activerecord-1.15.3\lib\active_r...
にメッセージがあり、
@@default_error_messages = {
:inclusion => "is not included in the list",
:exclusion => "is reserved",
:invalid => "is invalid",
:confirmation => "doesn't match confirmation",
:accepted => "must be accepted",
:empty => "can't be empty",
このあたりを書き換えれば、いけそうなんですが、それもどう...
ruby script/generate plugin new_errors
を実行し、
RUBY_HOME\depot\vendor\plugins\new_errors\init.rb
に、
require 'new_errors'
を追加して、
RUBY_HOME\depot\vendor\plugins\new_errors\lib\new_errors...
に
module ActiveRecord
class Errors
@@default_error_messages[:inclusion] = "is not includ...
@@default_error_messages[:exclusion] = "is reserved. ...
@@default_error_messages[:invalid] = "is invalid, mor...
@@default_error_messages[:confirmation] = "doesn't ma...
@@default_error_messages[:accepted ] = "must be accep...
@@default_error_messages[:empty] = "空は駄目よ"
@@default_error_messages[:blank] = "ブランクはいかん"
@@default_error_messages[:too_long] = "長すぎ (max is...
@@default_error_messages[:too_short] = "短すぎ (min i...
@@default_error_messages[:wrong_length] = "is the wro...
@@default_error_messages[:taken] = "has already been ...
@@default_error_messages[:not_a_number] = "数字じゃな...
end
end
を追加して、修正して実行し、WEBrickを再起動すると、
@@default_error_messages[:blank] = "ブランクはいかん"
で
new_errors.rb:10: Invalid char `\203' in expression (Syn...
とエラーで立ち上がりません。んー UTF-8で保存するととりあ...
ではどうなんだろうと思い修正すると、うまく表示された.... ...
あとは
4 errors prohibited this product from being saved
There were problems with the following fields:
を何とか日本語にせんと。ん?Shift-JISからずれてきているよ...
こいつをvendor\plugins\active_heartにコピーして動かすと、...
となると次に気になるのは項目名です。モデルに
class Product < ActiveRecord::Base
set_field_names :title => 'タイトル', :description => '...
とかしてやると、(UTF-8で保存)、エラー時の項目名は、無事日...
column.human_name
でタイトル表示しているからでした。
Product.human_attribute_name(column.human_name)
あれ?日本語化されんぞ? active_record_messages_ja.rbを...
def human_attribute_name(attribute_key_name)
if @field_names && @field_names[attribute_key_name]
@field_names[attribute_key_name]
else
_human_attribute_name(attribute_key_name)
end
end
の
_human_attribute_name(attribute_key_name)
に入ってる。ん?human_name? これって、先頭が大文字になっ...
Product.human_attribute_name(column.name)
にしてやれば、うまくタイトルが日本語で出力されました。さ...
edit.rhtmlを見ると、
<%= render :partial => 'form' %>
となってます。この:partialは部分テンプレートなので、とい...
<%= Product.human_attribute_name("title") %>
に変更しました。new.rhtmlも<%= render :partial => 'form' ...
***複数形の確認
Loading test environment (Rails 2.0.2)
>> "book".pluralize
"book".pluralize
=> "books"
>> "books".singularize
"books".singularize
=> "book"
*** YAML
YAMLを読み込む場合
yamlfile = YAML::load(File.open('hoge.yml'))
***二重送信防止
disable_with
でボタン押下後、表記がかわる。たとえばボタン名称は検索だ...
クリックすれば、処理中に変わる。
<%= submit_tag '検索',:name=>:seek,:disable_with=>"処理...
ただし、paramsには params[:seek]に'検索'って文字列がはい...
disable_withをつけるとそもそもparams[:seek]がない。んー
***Oracle
http://wiki.rubyonrails.org/database-support/oracle
***Mongrel Time out
朝webサーバにつなぐとまったくつながらず。Mongrelを再起動...
Status: 500 Internal Server Error
Mongrel timed out this thread: shutdown
apacheは
[Wed Apr 01 10:24:03 2008] [error] [client 192.168.1.1] ...
[Wed Apr 01 10:24:03 2008] [error] [client 192.168.1.1] ...
とエラーが発生しています。
どうも
[[Rails + MySQL (+ Mongrel?) でDB接続の通信が無い状態が続...
[[MySQLのinteractive_timeout>http://d.hatena.ne.jp/yaneur...
うちの環境では、
/usr/local/lib/ruby/gems/1.8/gems/activerecord-2.0.2/lib/...
を見てみると、
@@verification_timeout = 0
になっていたんで、config/environment.rbに
ActiveRecord::Base.verification_timeout = 14400
を追記してます。mysql側は
show variables;
で確認すると、interactive_timeout、wait_timeoutともに2880...
mysqlのmy.cnfに
[mysqld]
wait_timeout=31536000
interactive_timeout=31536000
とすれば期間を延ばせるんですが、これは最終手段だよな~ ...
***render、redirect_toの違い
単純にフォワード、リダイレクトだと思う。
[[リダイレクトとフォワードの違いを知る>http://www.atmarki...
**未解決
***class_eval
active_record_messages_ja.rbで使われていたのですが、?
***datetimeが化ける
登録は普通にできるのですが、product.send(column.name)で表...
Sun Mar 12 00:55:00 東京 (標準時) 2006
とりあえずかっこ悪いので、strftime("%Y/%m/%d %H:%M:%S")で...
*** Mysql::Error: Lost connection to MySQL server during ...
たまにこのようなエラーがでる。とりえあず
gem install mysql
としていれてみた。~
ERROR: Error installing mysql:
ERROR: Failed to build gem native extension.
ってエラーが出る場合は、
gem install mysql -- --with-mysql-dir=/usr/local/mysql
とかにしてみよう。
[[Lost connection to MySQL server during query>http://idm...
[[[Ruby on Rails] MySQLの Lost connectionエラー>http://d....
***
**TODO
***早く[[ext]]と連携させたい~
[[Lipsiadmin>http://rails.lipsiasoft.com/wiki/lipsiadmin]]~
[[Ext plugin>http://wota.jp/ac/?date=20070406]]|~
***errors.reject
error_messages_forの編集方法~
参考:[[独自 error_messages_for の作成>http://underrails....
***[[redMine>http://redmine.jp/]]
プロジェクト管理ソフトウェアだそうです。ソースを見せても...
[[Ruby on Railsで作られたプロジェクト管理ツールredMineを...
**リンク
[[api>http://api.rubyonrails.org/]]~
[[Rails API ドキュメント>http://railsapi.masuidrive.jp/]]~
[[ActiveRecord>http://activerecord.rubyforge.org/classes/...
[[RubyOnRails を使ってみる>http://jp.rubyist.net/magazine...
[[Rubyでアジャイルプロトタイピング>http://www.atmarkit.co...
[[ajax_scaffold_generator>http://rubyforge.org/projects/a...
[[Ruby Library Report 【第 3 回】 O/R マッピング>http://j...
[[RubyOnRails を使ってみる 【第 8 回】 Rails はまり道>htt...
[[pagination>http://wota.jp/ac/?date=20050629]]~
[[AvailableGenerators>http://wiki.rubyonrails.com/rails/p...
[[メーリングリスト>http://www.fdiary.net/ml/rails/]]~
[[RailsでWikiクローンを作る>http://tam.qmix.org/wiki/Mink...
[[WebプログラマはRailsに乗るべきか?>http://www.atmarkit....
[[Ruby on Rails on MacOSXでWebアプリ開発>http://blog.mata...
[[Rails Plugins...>http://blog.netswitch.jp/articles/2006...
[[Ruby on Railsのチームから学ぶ仕事術>http://www.atmarkit...
[[境界を越える: アクティブ・レコードを探る>http://www-06....
[[Java開発者のためのRubyガイド>http://codezine.jp/a/artic...
[[Ruby on Rails 初心者の館>http://www.h6.dion.ne.jp/~knt/...
[[Ruby on Rails チュートリアル集>http://diaspar.jp/node/8...
10分で作るWikiがあります。実際は12分らしいですが、たいし...
[[Ruby on Rails 2.0にアップグレードする方法>http://builde...
[[Ruby on Rails チュートリアル 「Webアプリケーション開...
[[Visual Studioを使ってRails開発「Ruby In Steel Personal ...
Visual Studioは使わないのですが、一応~
[[RJSなら数行のRubyコードでAjaxアプリを作成できる>http://...
[[Railsでレガシーデータを蘇えらせるテクニック>http://www....
[[どこでもできるRails開発「Ruby on Rails Portable」>http:...
[[Rails製のシンプルなEコマースシステム「EcomPages」>http:...
[[Rails 2.2 について興味が湧いたところだけ見てみました>ht...
[[created_at、updated_atの実装コードを追ってalias_method_...
[[Rails 2.1・その12(DBに登録してあるUTC日付データを簡単...
** 参考書籍
[[RailsによるアジャイルWebアプリケーション開発>http://www...
Railsをやるのであればとりあえず買っておきたい本です。
** コメント
-#comment
終了行:
* [[Ruby on Rails]]
1.2と2.0が混在しているなー ちゃんと分けないと...~
2.2がでましたね。Ruby 1.9に対応したか!速くなるかな?~
[[国際化されたRails 2.2登場、スレッドセーフとRuby 1.9対応...
#contents
** NEWS
2008/10/22~
[[Rails、PHPもサポートするフリーの統合開発環境「NetBeans ...
** 環境
http://rubygems.rubyforge.org/wiki/wiki.pl?RubyGemsよりRu...
wget http://rubyforge.org/frs/download.php/5208/rubygems...
unzip rubygems-0.8.11.zip
cd rubygems-0.8.11
ruby setup.rb
あら?つながらなくなってますね。上記URLはつながらなくなっ...
wget http://rubyforge.org/frs/download.php/17190/rubygem...
tar xzvf cd rubygems-0.9.2
ruby setup.rb
いまは1.0.1ですね。(2007-12-20)ではRailsもインストールし...
gem install rails --include-dependencies
最新にする場合は、
gem update rails
windowsは[[Railsインストール>http://www.rubylife.jp/rails...
まず、RubyGemsをhttp://docs.rubygems.org/のダウンロードよ...
rubyのディレクトリに展開後、(例:H:\ruby\rubygems-1.0.1)
cd H:\ruby\rubygems-1.0.1
ruby setup.rb
この後進んで、
As of RubyGems 0.8.0, library stubs are no longer needed.
Searching $LOAD_PATH for stubs to optionally delete (may...
...done.
No library stubs found.
H:\ruby\rubygems-1.0.1>
で終わり。[[zlib.dll>http://www.rubylife.jp/railsinstall/...
さてgemがはいったので、railsをいれましょう。
gem install rails --include-dependencies
んーSSLEAY32.dllやLIBEAY32.sllがないといわれましたね。[[O...
Installing ri documentation for rake-0.8.1...
Installing ri documentation for activesupport-2.0.2...
Installing ri documentation for activerecord-2.0.2...
2.0になっていたのか。
ほかに[[iconv>http://wiki.rubyonrails.com/rails/pages/ico...
readlineは解凍して、binにreadline.dllをコピーします。でな...
c:/ruby/lib/ruby/1.8/i386-mswin32/readline.so: 126: 指定...
- c:/ruby/lib/ruby/1.8/i386-mswin32/readline.so (LoadE...
とかってエラーがでます。
ではDEMOを動かしてみましょう。適当なディレクトリで、
rails demo
cd demo
ruby script/server
デフォルトでポート3000をつかってWEBrickが起動しますので、...
ruby script/generate controller コントローラ名
とするとMVCのコントローラが作成されます。コントローラ名は...
また実行して
no such file to load -- sqlite3
ってエラーが出た場合は、
gem install sqlite3-ruby
とします。それでもエラーが出る場合は、http://sqlite.org/d...
mysqlでも同じようなエラーがでました。leopardの場合は、
env ARCHFLAGS="-arch i386" gem install mysql -- --with-m...
**アップデイト
gem update --system
gem update
**Apache
***FastCGI
[[Apache]]のFastCGIを参考に先にいれて、実行したら、
RailsFCGIHandler(NameError)
とlog/error_logに出力されていたので、先を参考に(参考http:...
gemは下のRuby on Railsを参考にしてください。
gem install fcgi
一応httpdを再起動して、railsのプロジェクトを作ったら、そ...
#RewriteRule ^(.*)$ dispatch.cgi [QSA,L]
RewriteRule ^(.*)$ dispatch.fcgi [QSA,L]
また必要に応じて
#RewriteBase /test
を書き換えましょう。ここで私がはまった愚かなことがありま...
execle() failed: No such file or directory
や
(2)No such file or directory: FastCGI:
と表示され全く動きませんでした。cgiにしても動かない。これ...
dispatch.cgi
dispatch.fcgi
と2つのファイルがあります。cgi? そういえればwindowsでつ...
先頭に
#!c:/ruby/bin/ruby
なんだこれは...
#!/usr/local/bin/ruby
に書き換えると動き出しました.....
さてrails2を試してみると、ん?今度は
Invalid command 'RewriteEngine', perhaps mis-spelled or ...
なんてエラーがでているな。これはmod_rewriteが入ってなかっ...
FastCGI: comm with (dynamic) server "/www/public/dispatc...
これじゃよくわからんので、わからんときはWEBrickで
ruby script/server
とするとと、
/usr/local/lib/ruby/site_ruby/1.8/rubygems/custom_requir...
gettext入ってないないか。入れた覚えはないもんな。では入れ...
wget http://rubyforge.org/frs/download.php/31658/gettext...
gem install gettext-1.90.0.gem
やっと動きました。
さてこのままwebrootにコピーしちゃうと、configとかdbが丸見...
/webroot/usera/rubyを作ってそこに一式をコピーし(仮にプロ...
Alias /rubytest/ "/webroot/usera/ruby/rubytest/public/"
<Directory "/webroot/usera/ruby/rubytest/public">
Options +ExecCGI
AllowOverride all
Order allow,deny
Allow from all
AddHandler fastcgi-script .fcgi
</Directory>
ってやって、.htaccessのRewriteBaseを/rubytestとしてやりま...
参考:[[Ruby-GetText-Package>http://www.yotabanana.com/hi...
[[apache に redMine をインストールの Tips>http://wiki.enc...
***Mongrel
FastCGIは確かに早いが、評判がよろしくない。apache2で動い...
MongrelをいれてApacheと連携しましょう。
gem install mongrel --include-dependencies
とるすと、linuxなんで、
Select which gem to install for your platform (i686-linux)
1. mongrel 1.1.4 (x86-mswin32-60)
2. mongrel 1.1.4 (java)
3. mongrel 1.1.4 (ruby)
4. mongrel 1.1.3 (ruby)
5. mongrel 1.1.3 (i386-mswin32)
6. mongrel 1.1.3 (java)
7. Skip this gem
8. Cancel installation
> 3
Select which gem to install for your platform (i686-linux)
1. fastthread 1.0.1 (mswin32)
2. fastthread 1.0.1 (ruby)
3. Skip this gem
4. Cancel installation
> 2
としました。
gem install mongrel_cluster
も入れておきます。
ではちょっと起動して見ましょう。
mongrel_rails start -p 8000 -e production -c /webroot/ru...
引数の-pはポート、-eはRails environmentなんで指定しなけれ...
Rails requires RubyGems >= 0.9.4 (you have 0.9.2). Pleas...
ん?エラーだ。では指示通りに、
gem update --system
gettextは上記のFastCGIを参考にして、入れておきましょう。...
では終了してみましょう。
mongrel_rails stop -P /webroot/ruby/railstest/log/mongre...
さて動作したんで、次はリバースプロキシの設定です。mod_pro...
httpd.confに
ProxyRequests Off
<Proxy *>
Order deny,allow
Allow from all
</Proxy>
ProxyPass /railstest http://192.168.1.1:8000/railstest
ProxyPassReverse /railstest http://192.168.1.1:8000/rail...
を追加して再起動です。ではクラスタで複数起動するときは
mongrel_rails cluster::configure -N 2 -p 8000 -e product...
mongrel_rails cluster::start
です。apache2.2だと、mod_proxy_balancerが使えるので、参考...
<Proxy balancer://rails-app/>
BalancerMember http://192.168.1.1:8000/railstest ...
BalancerMember http://192.168.1.1:8001/railstest ...
</Proxy>
ってやるとバランサーになります。そういえば、
Ruby version is not up-to-date; loading cgi_multipart_eo...
ってエラーがでたことがあります。Rubyのバージョンが古いと...
[[Mongrel HOWTO>http://synth.jp/pg/2007/05/mongrel_howto....
[[Pound + Mongrel + Apache2.0 で Ruby on Rails!>http://re...
[[Mongrelを使ってみる。>http://kiyoeri.gotdns.org/joomla/...
[[CentOS5上でRuby on RailsアプリをApacheで動かす>http://d...
***LiteSpeed
速いらしいが調査中~
[[開発~運用Webサーバの比較>http://wota.jp/ac/?date=20060...
***[[Passenger>http://www.modrails.com/]]
本命はこいつか?Mongrelもいいですよ。
gem install passenger
passenger-install-apache2-module
インストールするとメッセージが表示されていますので、それ...
LoadModule passenger_module /Library/Ruby/Gems/1.8/gems/...
RailsSpawnServer /Library/Ruby/Gems/1.8/gems/passenger-1...
RailsRuby /System/Library/Frameworks/Ruby.framework/Vers...
<VirtualHost *:80>
ServerName www.yourhost.com
DocumentRoot /somewhere/public
</VirtualHost>
また[[Railsをさらに加速するテクノロジー「Ruby Enterprise ...
あるようで、1.9でRailsが動いてくれるまでなんとかしのぐか。
[[Passenger users guide>http://www.modrails.com/documenta...
[[チェック必須!Rails新時代の到来か?「Passenger(mod_rai...
**Railties
Railsを利用するためのユーティリティです。
script/generate ジェネレータ ひな形作成
model モデル
scaffold モデル名 コントローラ名 アクション名 # モデ...
controller コントローラ
migration マイグレーション
***migrate
テーブル作成
class CreateProducts < ActiveRecord::Migration
def self.up
create_table :products do |t|
t.column :title, :string, :limit=>100, :null => false
t.column :description, :string
t.column :image_url, :string, :limit=>200, :null =>...
t.column :price, :integer, :null => false
end
end
def self.down
drop_table :products
end
end
カラム追加
class AddDateAvailableToProduct < ActiveRecord::Migration
def self.up
add_column :products,:date_available,:datetime
end
def self.down
remove_column :products,:date_available
end
end
developmentではなくproductionに適用したい場合は、Eclipsの...
RAILS_ENV=production db:migrate
と打ち込んでリターンで実行されます。
[[Ruby on Rails で使えるデータ型>http://shin.moe-nifty.co...
[[MigrationによるDB管理>http://tam.qmix.org/wiki/Migratio...
**database.yml
どんな記述が追加出来るか調べていました。
development:
adapter: mysql
database: hoge_development
username: hogeuser
password: hogepass
host: 192.168.1.1
port: 3306
encoding: utf8
timeout: 5000
**environment.rb
***本番にDBを切り替える
# ENV['RAILS_ENV'] ||= 'production'
を
ENV['RAILS_ENV'] ||= 'production'
としてやります。
productionに設定すると、サーバー(httpd,mongrel等)を再起...
**ActiveRecord
参考:[[RubyOnRails を使ってみる 【第 3 回】 ActiveRecord...
[[ザリガニが見ていた...。>http://d.hatena.ne.jp/zariganit...
とても参考になります。このような方がお近くにおられれば.....
***項目命名規約
datetime _atで終わる
date _onで終わる
外部キー ターゲットのクラス名を小文字に変えて_idをつける
***テーブル名を変更する
def self.table_name() "tablename" end
もしくは
set_table_name "tablename"
***find
idでの検索では見つからない場合、エラーとなるので捕捉して...
product = Product.find(params[:id])
rescue ActiveRecord::RecordNotFound
flash[:notice] = "そんなIDはない"
とか、
product = Product.find(params[:id])
rescue => ex
flash[:notice] = ex.message
とか。
***トランザクション
ActiveRecord::Base::transaction() do
rascue
end
って書き方もできるのか..
http://underrails.seesaa.net/article/54762314.html
***has_many
べたで書いた場合
has_many :data1,
:class_name => "Data1",
:finder_sql => 'select data1.* from data1,dat...
ダブルクォーテーションではなくシングルクォーテーションで
またファインダメソッドを使って
has_many :specific_lineitems,
:class_name => "lineitem" do
def get(id)
find :all,:conditions=>['order_id = ?',id]
end
end
とかってしてやって、
p order.specific_lineitems.get(hoge)
としてやることもできる。
p order.lineitems.find(:first,:conditions =>["order_id=?...
でいいのですが。なんか変な感じだと思っていると、order.fin...
もちろんWHERE order_id = ?ではなく、LEFT OUTER JOINに。
仮に書けたとして、includeは書けるのか?
この辺は再調査だな。でもこんなの見つけてしまったというこ...
[[[Ruby on Rails]:include の JOIN 節に condition を追加し...
さて同容に孫でソートしたい場合はどうするのか?
has_many :lineitems,:include=>"lineitem",:order => "line...
としてやればできた。このorderは複数なのか。
[[has_manyでテーブル関連付けをしたときのDB更新>http://man...
[[ 関連とDBへの保存のタイミングを整理する>http://rails-re...
***find_by_sql
@table1 = Table1.find_by_sql("select table2koumoku1 from...
このfind_by_sqlはTable1と関係ないtable2でのsqlを使っても...
<% for table1 in @table1 -%>
<tr>
<td><%= h(table1.table2koumoku1) %></td>
</tr>
<% end -%>
これは逃げ道になりそう?またパラメータを渡す場合は、
aaaa = "11"
@table1 = Table1.find_by_sql("select table2koumoku1 from...
とか
@table1 = Table1.find_by_sql(["select table2koumoku1 fro...
他に
params = {}
params[:para2] = "2"
params[:para1] = "1"
find(:all,:conditions => ["code_id = :para1 and image_ur...
とすると
SELECT * FROM `products` WHERE (code_id = '1' and image_...
となるので、動的にSQLも書けることでしょう。
***connection.select_all
もうひとつの逃げ道として(逃げてばっかりですが..)、コント...
@datas = Table1.connection.select_all("select * from tab...
として、
<% @datas.each{|value| -%>
<tr>
<td><%= h(value['table2koumoku1']) %></td>
</tr>
<%} -%>
***destroyとdeleteの違い
deleteはコールバックと検証を迂回していき、直接deleteだけ...
destroyはすべて呼び出してくれます。ですので通常はdestroy...
***コード管理
漢には笑わせてもらいました。
[[いまこそ ARと外部キーについて考える (舞波)>http://wota....
***SQL確認
ActiveRecordが生成するSQLは、logディレクトリに出力されて...
それで確認できます。
***リンク
[[Rails RecipeBookはてな版(多対多の関連を設定する)>http:/...
[[「SQL書き方ドリル」のスキーマをActiveRecordで書く>http:...
**ActiveScaffold
[[優しいRailsの育て方>http://wota.jp/ac/?date=20071110]] ...
**GetText
エラーを日本語化したい場合、ActiveHeartよりこっちみたいな...
c:\ruby>gem install gettext
ERROR: While executing gem ... (Gem::RemoteFetcher::Fet...
接続済みの呼び出し先が一定の時間を過ぎても正しく応答...
ませんでした。または接続済みのホストが応答しなかったため...
ました。 - connect(2) (Errno::ETIMEDOUT)
getting size of http://gems.rubyforge.org/Marshal...
ん?なんだ。ファイアーウォールではじかれていたのか。では...
config/environment.rbの最初に
$KCODE='u' # u=utf s=Shift_JIS, e=EUC-JP
require 'jcode'
とし、最後に
require 'gettext/rails'
記述します。またapp/controllers/application.rbに
init_gettext "hogedom"
とテキストドメインの名前を記述しておきます。この名前はDB...
では翻訳文字を抽出する為にlib/tasksにrakeタスクをつくりま...
desc "Update pot/po files."
task :updatepo do
require 'gettext/utils'
GetText::ErbParser.init(:extnames => ['.rhtml', '.erb'])
GetText.update_pofiles(
"hogedom", #<<<<<<テキストドメインの名前
Dir.glob("{app,config,components,lib}/**/*.{rb,rhtml,...
"hogedom 1.0.0") #バージョン
end
desc "Create mo-files"
task :makemo do
require 'gettext/utils'
GetText.create_mofiles(true, "po", "locale")
end
では実行しましょう。
rake updatepo
するとpoディレクトリが作成され、その中にテキストドメイン...
これをpo/jaディレクトリを作成して、そこにコピーして、rail...
po/ja/railsproject.po
中を見ると、たとえば
#: app/models/product.rb:-
msgid "Product|Title"
msgstr ""
てな感じになっているので、
#: app/models/product.rb:-
msgid "Product|Title"
msgstr "タイトル"
とか日本語を入れてやります。設定後、
rake makemo
でエラー表示の時に項目名も日本語化されます。ではコントロ...
def create
@code = Code.new(params[:code])
respond_to do |format|
if @code.save
flash[:notice] = 'Code was successfully created.'
とかありますが、
flash[:notice] = 'Code was successfully created.'
を
flash[:notice] = _('Code was successfully created...
にしてやり、po/ja/railsproject.poに
#: app/controllers/codes_controller.rb:-
msgid "Code was successfully created."
msgstr "登録成功!"
としてやった後にrake makemoです。ではviewも
<p>
<%= f.submit 'Update' %>
</p>
を
<p>
<%= f.submit _('Update') %>
</p>
として、po/ja/railsproject.poに
msgid "Update"
msgstr "更新!"
これってmsgidってどこでも使えるですね。
ついでに、
class Code < ActiveRecord::Base
validates_presence_of :codekn,:code,:message => "%{fn}...
set_error_message_title("%{record}にエラーがある。", "%...
set_error_message_explanation("以下のエラーを確認せよ!...
end
とすると、
コードテーブルに2つのエラーが発生しました。
次の項目を確認してください。
* コードを入力してください。
* コード区分を入力してください。
ってメッセージが
コードテーブルに2個もエラーが...
ちょっとエラーが多いよ....
* コードは必須!
* コード区分は必須!
[[Ruby-GetText-Packageとは?>http://www.yotabanana.com/hi...
[[Ruby on RailsでRuby-GetText-Packageを使う>http://www.yo...
[[Ruby on Rails]2.0でRuby-GetTextを使う>http://d.hatena.n...
[[MacOS X10.5 Leopard環境にRuby-GetTextをインストールする...
[[GetTextで日本語化してみる。>http://d.hatena.ne.jp/zarig...
[[Ruby-GetText初体験その6【po ファイルと mo ファイル】>h...
**デバッグ
p オブジェクト名
とすると、コンソールに表示されれるので確認
<%= debug(params) %>
[[Railsでデバッグをする7つの方法>http://blog.s21g.com/ar...
**TIPS
***とりあえず
app/controllers/コントローラ名_controller.rb
class コントローラ名Controller < ApplicationController
def メソッド名
@test = "へへっへ"
end
end
メソッド名.rhtml
<html>
<head>
<title>ほほほほー</title>
</head>
<body>
<% 3.times do |count| %>
<h1><%= count %>ひっひ-</h1>
<%= @test %>
<% end %>
</body>
</html>
ここで、JSPみたいにRubyのコードを<%で埋め込んでますが、JS...
さてscaffoldをつかったらエラーがでました。Ruby on Rails2....
undefined method `scaffold' for AdminController:Class
その対象のプロジェクトのディレクトリで、
ruby script/plugin install scaffolding
ruby script/plugin install http://tools.assembla.com/svn...
ruby script/plugin install http://tools.assembla.com/svn...
また登録したとき
ActionController::InvalidAuthenticityToken
ってでる。これも2.0からで外部から来たリクエストであればは...
skip_before_filter :verify_authenticity_token
を追加してやるとskipしてくれます。
また実際に動かしてみると、登録時に日本語で落ちる場合は、
ActiveRecord::StatementInvalid in ...
config/database.ymlにencoding:の指定を追加しましょう。db...
script/generate scaffold book
から
script/generate scaffold book title:string price:integer
みたいにモデル名に後にフィールド名と:データ形式を追加する...
ん?生成されたコントローラを見ると、
respond_to do |format|
format.html # index.html.erb
format.xml { render :xml => @books }
end
ってあります。これって2.0からか。http://wota.jp/ac/?date=...
参考:[[■[Ruby on Rails]2.0のscaffoldから書き直してみる>h...
***ルートページの設定
config/routes.rbに
# You can have the root of your site routed with map.roo...
# map.root :controller => "welcome"
とかってありますので、
map.root :controller => "login", :action=>"login"
とかに変更して、public/index.htmlを消しておきます。
***部分テンプレート
頭にアンダーバー(_)をつける。
<%= render(:partial => "cartitem",:collection => @cart.i...
このような場合、_cartitem.html.erbという部分テンプレート...
またここではcollectionにセットをしている為、_cartitem.htm...
_cartitem.html.erbではこのcollectionの要素はcartitemでア...
<li><%= h(cartitem.quantity)%>個<%= h(cartitem.price)%>...
みたいに。このcollectionは他にもobjectとか指定可能
***cycle
<%= cycle(i, "") -%>
とかって書けば、一つとばしに出力されるのかなーと思ってい...
そりゃそうか。~
[[cycleヘルパーを使ってテーブルをストライプにする>http://...
***スクリプト
rails プロジェクト名 #プロジェクト作成
ruby script/server -e development(test,production) #サー...
ruby script/generate scaffold モデル名 コントーラ名 ※2.0...
ruby script/generate ajax_scaffold モデル名 コントーラ名...
ruby script/generate controller コントローラ名 #コント...
ruby script/generate model テーブル名 #モデル作成 単数...
ruby script/destroy ファイル削除
ruby script/runner メソッドをコンテキスト外で動かすこと...
***コールバッグフック
def before_create #保存前にフック
def after_create #保存後にフック
def before_destroy #削除前にフック
***チェック
必須チェック
validates_presence_of :項目
ユニーク
validates_uniqueness_of :項目
ここで項目が2つでユニークって場合で,たとえばhoge1の中でh...
validates_uniqueness_of :hoge2,:scope => :hoge1
ん?3つの場合はどうすんだ?
validates_uniqueness_of :hoge3, :scope => [:hoge1, :hoge2]
でいいのか。
数値チェック
validates_numericality_of :項目
[[ActiveRecord::Validations::ClassMethods>[http://techno....
[[Rails1.2.3 ActiveRecordで日付チェック(Validates Multipa...
***モデルにエラーを追加する場合
model.errors.add_to_base("エラーを追加")
***collection_select
<%= collection_select("user",user.code,@users,"code","na...
とかしてもうまくselecedがついてくれないので、とりあえず、...
def select_ext (strName,strCode,arrData,value,outdata,i...
strReturn = '<select id="'+strName+'_'+strCode+'" nam...
if isBlank == true
strReturn += '<option value=""></option>'
end
for oneData in arrData
if (strCode == oneData[value])
strReturn += '<option value="'+oneData[value]+'" ...
else
strReturn += '<option value="'+oneData[value]+'">...
end
end
strReturn += "</select>"
return strReturn
end
とかしてviewから呼び出して逃げてます.. はやく調べんと..
codes = Code.find(:all,:order => "id").map {|u| [u.nmnam...
f.select(:code_id,codes,{:include_blank => true})
と思ったらあっさりOK。
codes = Code.find(:all,:order => "id")
f.collection_select(:code_id,codes,:id,:code,{:include_b...
もOK。
f.collection_select(:code_id,Code.find(:all,:order => "i...
でもOK。書式は
collection_select(object, method, collection, value_meth...
なので、
f.collection_select(:code_id,Code.find(:all,:order => "i...
と指定できる。
[[collection_select>http://api.rubyonrails.org/classes/Ac...
[[Rails のコンボボックス(select)を生成する時の tabindex...
を参照
***複数のsubmitボタン (2.0)
とりあえず、やってみた。viewで
<%= f.submit 'ボタン1',:name=>'aa' %>
<%= f.submit 'ボタン2',:name=>'aa2' %>
で、controllerで
def update
unless params[:aa].nil?
p "aa != nil";
end
unless params[:aa2].nil?
p "aa2 != nil";
end
ただこれ、disable_withを指定するとparamsにセットされなく...
[[同一フォームに複数のイメージ送信ボタン>http://pirochin....
http://www.fdiary.net/ml/rails/msg/207 リンクきれてるな~
***複数モデルの保存 (2.0)
では早速サンプルを。ついでに複数ボタンも
<% form_tag(:action => 'update1') do %>
<% for @code in @codes %>
<%= text_field("code[]", 'nmname') %><br>
<% end %>
<%= submit_tag 'こっちだけ更新',:name=>'aa1' %>
<%= submit_tag 'なにもしない',:name=>'aa2' %>
<% end %>
この2行目でcodeを@codeとインスタンス変数にして、
3行目でcodeに[]をつけてやってます。するとhtmlは
<form action="/codes/update1" method="post">
<input id="code_1_nmname" name="code[1][nmname]" size="...
<input id="code_2_nmname" name="code[2][nmname]" size="...
<input id="code_3_nmname" name="code[3][nmname]" size="...
<input name="aa1" type="submit" value="こっちだけ更新" />
<input name="aa2" type="submit" value="なにもしない" />
</form>
と生成してくれます。ではcontrollerで
def update1
#p params
unless params[:aa1].nil?
params[:code].each{|key,value|
Code.update(key,:nmname => value[:nmname])
}
end
redirect_to :action => 'index'
end
とすれば更新できます。
params[:code].each{|key,value|
Code.update(key,:nmname => value[:nmname])
}
は
Code.update(params[:code].keys,params[:code].values)
と簡単に記述できます。~
form_forをつかってみましょう。ついでにform_forに適当なhog...
<% form_for :hoge, :url => {:action => 'update1'} do |f|...
<%= f.text_field :nmname %><br>
<% for @code in @codes %>
<%= text_field("code[]", 'nmname') %><br>
<% end %>
<%= submit_tag 'こっちだけ更新',:name=>'aa1' %>
<%= submit_tag 'なにもしない',:name=>'aa2' %>
<% end %>
でhtmlは
<form action="/codes/update1" method="post">
<input id="hoge_nmname" name="hoge[nmname]" size="30" ty...
<input id="code_1_nmname" name="code[1][nmname]" size="3...
<input id="code_2_nmname" name="code[2][nmname]" size="3...
<input id="code_3_nmname" name="code[3][nmname]" size="3...
<input name="aa1" type="submit" value="こっちだけ更新" />
<input name="aa2" type="submit" value="なにもしない" />
</form>
ちゃんとidやnameにhogeがつきました。ちなみにselectの場合...
<%= collection_select("code[]", 'code',@codes,:code,:nmn...
でいけるので、同じです。
参考~
[[1アクションで複数のモデルを同時に保存するには?>http://...
[[A Day In The Life(Railsで複数行更新)>http://blog.goo.ne...
[[ぺんちゃん日記(text_fieldなどのフォームを配列化する)>ht...
***paginate (1.2)
モデルに対しては
@pages, @users = paginate(:users, :order_by => 'usercode')
とかすればいいのだが、そんな単純なケースでない場合、Pagin...
per_page = 5
@tmp = Jikanwari.find_by_sql(["select count(*) as cnt fr...
count = @tmp[0].cnt.to_i
@pages = Paginator.new(self, count, per_page, @params['p...
@jkanwaris = Jikanwari.find_by_sql(["select * from jikan...
でviewに
<%= pagination_links(@pages) %>
***paginate(2.0)
[[classic_pagination を will_paginateに置き換えてみた。>h...
***フィルター
before_filter :メソッド名1 :except => :メソッド2
メソッドの呼び出し前にメソッド名1を呼び出します。ただしメ...
***フォームヘルパー
-link_to~
コントローラを指定したい場合
<%= link_to '登録', :controller => 'conta', :action => '...
さてRails2.0よりscaffoldで生成したhtml.erbを見ると
<%= link_to 'Edit', edit_flower_path(flower) %>
ってなっていたんです。なんじゃこれ?edit_モデル名_path?
[[Ruby on Rails/第11回勉強会 - RESTful Rails Development>...
また[[2.0のscaffoldから書き直してみる>http://d.hatena.ne....
[[2.0のmap.resourcesのオプション設定いろいろ>http://d.hat...
がとても参考になりました。[[RailsによるアジャイルWebアプ...
確認は
rake routes
で
-form_tag~
<%= form_tag :controller => 'conta',:action => 'touroku'...
さて2.0にすると、
undefined local variable or method `end_form_tag' for #<...
とエラーが..end_form_tagはなくなったんですね。endです。
-text_field_tag
<%= text_field_tag("koumokumei", atai,options = {:maxlen...
DBとか絡まない場合。
hiddenではhidden_field_tagがある。
-button_to~
formを含んだsubmitボタンを生成します。formを含んだ? サ...
<% for product in @products -%>
<%= product.title %><br>
<%= text_field_tag :title, product.title %><br>
<%= button_to "カーとに入れる",{:action=> :add_to_cart, ...
<hr>
<% end %>
このようにforでまわした場合は、どうなるかですが、
ひひい<br>
<input id="title" name="title" type="text" value="ひひい...
<form method="post" action="/store/add_to_cart/2?para1=1...
<div>
<input onclick="return confirm('Are you sure?');" type...
<input name="authenticity_token" type="hidden" value="...
</div>
</form>
<hr>
ほほー<br>
<input id="title" name="title" type="text" value="ほほー...
<form method="post" action="/store/add_to_cart/1?para1=1...
<div>
<input onclick="return confirm('Are you sure?');" type...
<input name="authenticity_token" type="hidden" value="...
</div>
</form>
<hr>
となりました。para1とかはちゃんとformにくっついているんで...
にないです。ということは自分だけで完結するformとsubmitを...
***コントローラ名取得
<%= controller.action_name%>
***Ajax
まずjavascriptsを使えるようにしておきます。javascriptsはp...
<%= javascript_include_tag :defaults %>
としておくと、
<script src="/javascripts/prototype.js?1204131898" type=...
みたいに生成されます。そして、
<% form_tag(:action => 'add_to_cart',:id=>product) do %>
とかなっているところを
<% form_remote_tag :url=>{:action=>:add_to_cart,:id=>pro...
とform_remote_tagに変更します。htmlは
<form action="/store/add_to_cart/3" method="post" onsubm...
parameters:Form.serialize(this) + '&authenticity_tok...
return false;">
とできてます。このAjax.Requestはprototype.jsですね。param...
送ってくれます。で、store_controllerのadd_to_cartメソッド...
後でちゃんと勉強するとして、add_to_cart.rjsの中身は
page.replace_html("cartid",:partial=>"cart",:object=>@ca...
とした場合、雰囲気はrenderに似ていますが、要は部分テンプ...
@cartは部分テンプレートで使うオブジェクトになります。
ということは、store_controller#add_to_cartのレンダリング...
こりゃ便利!さらにデバッグはfirebugを使って、NetのXHRを選...
ajax_scaffoldを使う場合
gem install ajax_scaffold_generator
***RJS
html.erbを
<%= javascript_include_tag :defaults %>
<div id="hoge">
hoho
</div>
として、pageをrjsに書いてどうなるかみてみます。
<%= javascript_include_tag :defaults %>
をしておくと、public\javascripts配下のjsをインクルードし...
<script src="/javascripts/prototype.js?1204131898" type=...
<script src="/javascripts/effects.js?1204131898" type="t...
<script src="/javascripts/dragdrop.js?1204131898" type="...
<script src="/javascripts/controls.js?1204131898" type="...
<script src="/javascripts/application.js?1203128030" typ...
後ろについている?1203128030は勝手につきます。おそらくブラ...
-replace_html~
page.replace_html("hoge",:partial=>"cart",:object=>@cart)
とすると、部分テンプレート_cartでhogeを置き換えます。ちな...
page.replace_html("hoge",:partial=>"cart",:object=>@cart...
とかしたら、部分テンプレート_cartで
<%= hogepara %>
とかで使えます。
-insert_html
page.insert_html :top,'hoge',"追加ーtop"
page.insert_html :before,'hoge',"追加ーbefore"
page.insert_html :after,'hoge',"追加ーafter"
page.insert_html :bottom,'hoge',"追加ーbuttom"
とすると
追加ーbefore
<div id="hoge">
追加ーtop
hoho
追加ーbuttom
</div>
追加ーafter
FirefoxのDOM Inspectorで確認しました。
page.insert_html :top,'hoge',content_tag("div", "追加ーt...
であれば、
<div>追加ーtop</div>
になります。ではテーブルに追加してみましょう。html.erbが
<table>
<thead><th>カラム名</th></thead>
<tfoot></tfoot>
<tbody id="target">
<tr><td>ああああ</td></tr>
</tbody>
</table>
として、
page.insert_html :bottom, 'target', content_tag("tr", co...
とすると行が増えていきます。
参考:[[Ajax でテーブルへの追加>http://d.hatena.ne.jp/malu...
またidとか指定する場合は、
page.insert_html :bottom, 'target', content_tag(:tr, con...
とできます。またシンボルに変更してます。
-update~
page['hoge'].update('aaaa').show
とすると、hogeがaaaaにupdateされます。
-effect~
ActionView::Helpers::ScriptaculousHelperを使ってやるとい...
page.visual_effect :grow, :tr1, :duration => 0.6
やidをいきなり指定して、
page[:currentitem].visual_effect :highlight,:startcolor ...
とかするとエフェクトをかけれます。
-sortable_element~
[[マウスで握って並べ替える。>http://d.hatena.ne.jp/zariga...
参考:~
[[RubyOnRails を使ってみる 【第 7 回】 RJS を使ってみる>h...
[[RJSでテーブルを操作する時の注意>http://d.hatena.ne.jp/y...
[[Rails RecipeBookはてな版>http://rails-recipebook.g.hate...
***セッションをDBに
rake db:sessions:create
とすると
create db/migrate/XXX_create_sessions.rb
と作成されるので、
rake db:migrate
でsessionsテーブルができてます。そしてconfig/environment....
# config.action_controller.session_store = :active_recor...
を
config.action_controller.session_store = :active_record_...
としてやります。さてサーバ再起動で、
c:/ruby/lib/ruby/gems/1.8/gems/activesupport-2.0.2/lib/a...
in `const_missing': uninitialized constant CGI::Session:...
from c:/ruby/lib/ruby/gems/1.8/gems/actionpack-2.0.2/lib...
in `const_get'
from c:/ruby/lib/ruby/gems/1.8/gems/actionpack-2.0.2/lib...
ってエラーが出た... なんじゃ んー
ではactiverecodeをつかってるいんだろうから、config/enviro...
require 'active_record'
を追加。どうかな?おっ動いた!では実際にアプリを動かして...
ActionController::InvalidAuthenticityToken in Store#index
No :secret given to the #protect_from_forgery call.
Set that or use a session store capable of generating it...
んー ではメッセージにしたがってActionControllerを見てみ...
protect_from_forgery # :secret => '11771fd07d754cc5380bd...
これのとことか。コメントをはずしてやって
protect_from_forgery :secret => '11771fd07d754cc5380bdho...
すると動き始め、sessionテーブルを覗くと保存されています。
消したい場合は、
db:sessions:clear
で
***Shift-JIS
Shitf-JISにこだわっているわけではなく、他の文字コードを使...
encoding: sjis
を追記した。またenvironment.rbに
$KCODE = 's'
を追加してみたが、文字化けは変わらなかったので、
application.rbを
class ApplicationController < ActionController::Base
# Pick a unique cookie name to distinguish our session...
session :session_key => '_rubytest_session_id'
before_filter :set_charset
private
def set_charset
headers["Content-Type"] = "text/html; charset=Shif...
end
end
にすると表示されるようになった。しかし、これでやるとmodel...
validates_presence_of :title,:message => "に空はだめ"
とか日本語にすると落ちてしまうので、before_filterをやめて...
$KCODE = 'SJIS'
ActionController::Base.default_charset = 'Shift_JIS'
としてやると日本語で出力されました。出力はされましたが、...
RUBY_HOME\gems\1.8\gems\activerecord-1.15.3\lib\active_r...
にメッセージがあり、
@@default_error_messages = {
:inclusion => "is not included in the list",
:exclusion => "is reserved",
:invalid => "is invalid",
:confirmation => "doesn't match confirmation",
:accepted => "must be accepted",
:empty => "can't be empty",
このあたりを書き換えれば、いけそうなんですが、それもどう...
ruby script/generate plugin new_errors
を実行し、
RUBY_HOME\depot\vendor\plugins\new_errors\init.rb
に、
require 'new_errors'
を追加して、
RUBY_HOME\depot\vendor\plugins\new_errors\lib\new_errors...
に
module ActiveRecord
class Errors
@@default_error_messages[:inclusion] = "is not includ...
@@default_error_messages[:exclusion] = "is reserved. ...
@@default_error_messages[:invalid] = "is invalid, mor...
@@default_error_messages[:confirmation] = "doesn't ma...
@@default_error_messages[:accepted ] = "must be accep...
@@default_error_messages[:empty] = "空は駄目よ"
@@default_error_messages[:blank] = "ブランクはいかん"
@@default_error_messages[:too_long] = "長すぎ (max is...
@@default_error_messages[:too_short] = "短すぎ (min i...
@@default_error_messages[:wrong_length] = "is the wro...
@@default_error_messages[:taken] = "has already been ...
@@default_error_messages[:not_a_number] = "数字じゃな...
end
end
を追加して、修正して実行し、WEBrickを再起動すると、
@@default_error_messages[:blank] = "ブランクはいかん"
で
new_errors.rb:10: Invalid char `\203' in expression (Syn...
とエラーで立ち上がりません。んー UTF-8で保存するととりあ...
ではどうなんだろうと思い修正すると、うまく表示された.... ...
あとは
4 errors prohibited this product from being saved
There were problems with the following fields:
を何とか日本語にせんと。ん?Shift-JISからずれてきているよ...
こいつをvendor\plugins\active_heartにコピーして動かすと、...
となると次に気になるのは項目名です。モデルに
class Product < ActiveRecord::Base
set_field_names :title => 'タイトル', :description => '...
とかしてやると、(UTF-8で保存)、エラー時の項目名は、無事日...
column.human_name
でタイトル表示しているからでした。
Product.human_attribute_name(column.human_name)
あれ?日本語化されんぞ? active_record_messages_ja.rbを...
def human_attribute_name(attribute_key_name)
if @field_names && @field_names[attribute_key_name]
@field_names[attribute_key_name]
else
_human_attribute_name(attribute_key_name)
end
end
の
_human_attribute_name(attribute_key_name)
に入ってる。ん?human_name? これって、先頭が大文字になっ...
Product.human_attribute_name(column.name)
にしてやれば、うまくタイトルが日本語で出力されました。さ...
edit.rhtmlを見ると、
<%= render :partial => 'form' %>
となってます。この:partialは部分テンプレートなので、とい...
<%= Product.human_attribute_name("title") %>
に変更しました。new.rhtmlも<%= render :partial => 'form' ...
***複数形の確認
Loading test environment (Rails 2.0.2)
>> "book".pluralize
"book".pluralize
=> "books"
>> "books".singularize
"books".singularize
=> "book"
*** YAML
YAMLを読み込む場合
yamlfile = YAML::load(File.open('hoge.yml'))
***二重送信防止
disable_with
でボタン押下後、表記がかわる。たとえばボタン名称は検索だ...
クリックすれば、処理中に変わる。
<%= submit_tag '検索',:name=>:seek,:disable_with=>"処理...
ただし、paramsには params[:seek]に'検索'って文字列がはい...
disable_withをつけるとそもそもparams[:seek]がない。んー
***Oracle
http://wiki.rubyonrails.org/database-support/oracle
***Mongrel Time out
朝webサーバにつなぐとまったくつながらず。Mongrelを再起動...
Status: 500 Internal Server Error
Mongrel timed out this thread: shutdown
apacheは
[Wed Apr 01 10:24:03 2008] [error] [client 192.168.1.1] ...
[Wed Apr 01 10:24:03 2008] [error] [client 192.168.1.1] ...
とエラーが発生しています。
どうも
[[Rails + MySQL (+ Mongrel?) でDB接続の通信が無い状態が続...
[[MySQLのinteractive_timeout>http://d.hatena.ne.jp/yaneur...
うちの環境では、
/usr/local/lib/ruby/gems/1.8/gems/activerecord-2.0.2/lib/...
を見てみると、
@@verification_timeout = 0
になっていたんで、config/environment.rbに
ActiveRecord::Base.verification_timeout = 14400
を追記してます。mysql側は
show variables;
で確認すると、interactive_timeout、wait_timeoutともに2880...
mysqlのmy.cnfに
[mysqld]
wait_timeout=31536000
interactive_timeout=31536000
とすれば期間を延ばせるんですが、これは最終手段だよな~ ...
***render、redirect_toの違い
単純にフォワード、リダイレクトだと思う。
[[リダイレクトとフォワードの違いを知る>http://www.atmarki...
**未解決
***class_eval
active_record_messages_ja.rbで使われていたのですが、?
***datetimeが化ける
登録は普通にできるのですが、product.send(column.name)で表...
Sun Mar 12 00:55:00 東京 (標準時) 2006
とりあえずかっこ悪いので、strftime("%Y/%m/%d %H:%M:%S")で...
*** Mysql::Error: Lost connection to MySQL server during ...
たまにこのようなエラーがでる。とりえあず
gem install mysql
としていれてみた。~
ERROR: Error installing mysql:
ERROR: Failed to build gem native extension.
ってエラーが出る場合は、
gem install mysql -- --with-mysql-dir=/usr/local/mysql
とかにしてみよう。
[[Lost connection to MySQL server during query>http://idm...
[[[Ruby on Rails] MySQLの Lost connectionエラー>http://d....
***
**TODO
***早く[[ext]]と連携させたい~
[[Lipsiadmin>http://rails.lipsiasoft.com/wiki/lipsiadmin]]~
[[Ext plugin>http://wota.jp/ac/?date=20070406]]|~
***errors.reject
error_messages_forの編集方法~
参考:[[独自 error_messages_for の作成>http://underrails....
***[[redMine>http://redmine.jp/]]
プロジェクト管理ソフトウェアだそうです。ソースを見せても...
[[Ruby on Railsで作られたプロジェクト管理ツールredMineを...
**リンク
[[api>http://api.rubyonrails.org/]]~
[[Rails API ドキュメント>http://railsapi.masuidrive.jp/]]~
[[ActiveRecord>http://activerecord.rubyforge.org/classes/...
[[RubyOnRails を使ってみる>http://jp.rubyist.net/magazine...
[[Rubyでアジャイルプロトタイピング>http://www.atmarkit.co...
[[ajax_scaffold_generator>http://rubyforge.org/projects/a...
[[Ruby Library Report 【第 3 回】 O/R マッピング>http://j...
[[RubyOnRails を使ってみる 【第 8 回】 Rails はまり道>htt...
[[pagination>http://wota.jp/ac/?date=20050629]]~
[[AvailableGenerators>http://wiki.rubyonrails.com/rails/p...
[[メーリングリスト>http://www.fdiary.net/ml/rails/]]~
[[RailsでWikiクローンを作る>http://tam.qmix.org/wiki/Mink...
[[WebプログラマはRailsに乗るべきか?>http://www.atmarkit....
[[Ruby on Rails on MacOSXでWebアプリ開発>http://blog.mata...
[[Rails Plugins...>http://blog.netswitch.jp/articles/2006...
[[Ruby on Railsのチームから学ぶ仕事術>http://www.atmarkit...
[[境界を越える: アクティブ・レコードを探る>http://www-06....
[[Java開発者のためのRubyガイド>http://codezine.jp/a/artic...
[[Ruby on Rails 初心者の館>http://www.h6.dion.ne.jp/~knt/...
[[Ruby on Rails チュートリアル集>http://diaspar.jp/node/8...
10分で作るWikiがあります。実際は12分らしいですが、たいし...
[[Ruby on Rails 2.0にアップグレードする方法>http://builde...
[[Ruby on Rails チュートリアル 「Webアプリケーション開...
[[Visual Studioを使ってRails開発「Ruby In Steel Personal ...
Visual Studioは使わないのですが、一応~
[[RJSなら数行のRubyコードでAjaxアプリを作成できる>http://...
[[Railsでレガシーデータを蘇えらせるテクニック>http://www....
[[どこでもできるRails開発「Ruby on Rails Portable」>http:...
[[Rails製のシンプルなEコマースシステム「EcomPages」>http:...
[[Rails 2.2 について興味が湧いたところだけ見てみました>ht...
[[created_at、updated_atの実装コードを追ってalias_method_...
[[Rails 2.1・その12(DBに登録してあるUTC日付データを簡単...
** 参考書籍
[[RailsによるアジャイルWebアプリケーション開発>http://www...
Railsをやるのであればとりあえず買っておきたい本です。
** コメント
-#comment
ページ名: