醤油:砂糖:酢:すりゴマ
を
1:1:1~2:3~4
ぐらいの比率でまぜて
ダシを適宜加えて、食材に和える
詳しいレシピは以下を参照してください。
ポークソテー玉ねぎソース
以下のソースを準備
玉ねぎのすりおろし 大目
ニンニクのすりおろし 少な目
醤油:酢
を
3:1
で混ぜておく。
豚肉を塩コショウしてやいて、焼けたら皿に出す。
熱いフライパンにソースを入れてひと煮立ちさせて肉にかける
詳しいレシピは、以下を参照してください。
玉ねぎのすりおろし 大目
ニンニクのすりおろし 少な目
醤油:酢
を
3:1
で混ぜておく。
豚肉を塩コショウしてやいて、焼けたら皿に出す。
熱いフライパンにソースを入れてひと煮立ちさせて肉にかける
詳しいレシピは、以下を参照してください。
味噌マヨネーズホイル焼き
魚の切り身に味噌とマヨネーズを同量まぜて塗り、適当に他の食材をいれてアルミでつつんで10分ぐらい焼く。
最後は包みをあけて焦げ目をつけて仕上げる。
詳しいレシピは以下を参照してください。
最後は包みをあけて焦げ目をつけて仕上げる。
詳しいレシピは以下を参照してください。
とりのレモンソース漬け
とりもも肉を
塩:サラダ油:レモン汁
を
1:2:4
に
パプリカ、ニンニク、胡椒を少々いれたものに半日ほど漬けて、塩焼きの要領で網で焼く
ちゃんとしたレシピは、以下を参照した方がよいです。
塩:サラダ油:レモン汁
を
1:2:4
に
パプリカ、ニンニク、胡椒を少々いれたものに半日ほど漬けて、塩焼きの要領で網で焼く
ちゃんとしたレシピは、以下を参照した方がよいです。
2011-01-28
ActiveScaffoldでセレクトボックスのソート順を変える
ActiveScaffoldでは、モデルでbelongs_toで指定しているモデルの内容を表示することができます。
データを変更するときもセレクトボックスを使うように指定すれば、モデルの内容のセレクトボックスを勝手に作ってくれます。
具体的な使い方は、
http://slap.s101.xrea.com/diary/log/eid465.html
が参考になります。
しかし、セレクトボックスの中身はデータの昇順になってしまっています。降順にするとか違うカラムを利用した順番でソートの順番を変更するには、以下のサイトの手段をとる必要があります。
http://grayhole.blogspot.com/2010/05/activescaffold-select-sort.html
ActiveScaffoldに手を入れないとダメなのでした。
ちなみにbelongs_toのモデルとは関係なく、普通にセレクトボックスを作成するには表示する内容をハッシュを渡してやればよいのですが順番が保障されません。
順番にこだわりたい場合は、
ActiveSupport::OrderedHash
を使う必要があります。
データを変更するときもセレクトボックスを使うように指定すれば、モデルの内容のセレクトボックスを勝手に作ってくれます。
具体的な使い方は、
http://slap.s101.xrea.com/diary/log/eid465.html
が参考になります。
しかし、セレクトボックスの中身はデータの昇順になってしまっています。降順にするとか違うカラムを利用した順番でソートの順番を変更するには、以下のサイトの手段をとる必要があります。
http://grayhole.blogspot.com/2010/05/activescaffold-select-sort.html
ActiveScaffoldに手を入れないとダメなのでした。
ちなみにbelongs_toのモデルとは関係なく、普通にセレクトボックスを作成するには表示する内容をハッシュを渡してやればよいのですが順番が保障されません。
順番にこだわりたい場合は、
ActiveSupport::OrderedHash
を使う必要があります。
2011-01-27
Railsでクラス名を記述したテキストからオブジェクトを生成する
Railsでは、Stringクラスとかも拡張されているようです。
例えば、クラス名を記述したテキストからオブジェクトを生成する
constantize
とかです。
使い方的には、以下のような感じです。
利用するクラスが違うだけで、似たような処理をしている部分があり、
なんかクラス名をいい感じに扱えないかなぁとか思っていたところ、constantizeが見つかった次第です。
例えば、クラス名を記述したテキストからオブジェクトを生成する
constantize
とかです。
使い方的には、以下のような感じです。
>> aaa = "User" => "User" >> ccc = aaa.constantize.new => #<User id: nil, name: nil, created_at: nil, updated_at: nil>こんな感じでcccにUserクラスをnewしたオブジェクトが格納できます。
利用するクラスが違うだけで、似たような処理をしている部分があり、
なんかクラス名をいい感じに扱えないかなぁとか思っていたところ、constantizeが見つかった次第です。
2011-01-26
ActiveScaffoldでbelogns_toのモデルの内容でソートする
最近、ActiveScaffoldをいろいろいじっています。
ActiveScaffoldでは、あるモデルに関係している情報もいい感じで表示してくれる機能があります。
例えば、以下のモデルがあるとします。
それぞれのテーブルは、以下の情報を持つとします。
users
groups
Userの一覧を表示するならば以下のような感じのコントローラーを作成します。
これで表示するとUser一覧にグループ情報としてGroupモデルのto_labelで指定した内容で一覧が以下のような感じで表示されます。
登録や変更をする際もgroup欄にはセレクトto_labelで指定した内容のセレクトボックスが表示され、ちゃんと対応するgroup_idがセットされて登録されることになります。
ここで表示順を以下のようにgroups.codeで降順にして、さらにuser.nameの昇順にしたいとするとします。
そのためにUserControllerに以下を追加します。
config.list.sorting = [{:group => :desc},{:name => :asc}]
でも、これでは以下のエラーが出てダメなのです。
Can't mix :method- and :sql-based sorting
それぞれ単独ならば問題なく動きます。
どうやらデフォルトでは、直接表示させているモデルに関するデータでソートする場合は、sqlでソートさせているのですが 関連するモデルの情報でソートする際は、データを持ってきてからActiveScaffold側でソートしているようです。
そしてソート手段が混ざるとダメなようです。
これをなんとかするには、以下のようにgroupsも検索対象に含めるように明示します。
config.columns[:group].includes = [:group]
config.columns[:group].sort_by :sql => "groups.code"
これでソートができるようになりました。
最終的なコントローラーは以下のような感じです。
ActiveScaffoldでは、あるモデルに関係している情報もいい感じで表示してくれる機能があります。
例えば、以下のモデルがあるとします。
class User < ActiveRecord::Base
belongs_to :group
end
class Group < ActiveRecord::Base
has_many :users
def to_label
"#{code}:#{name}"
end
end
それぞれのテーブルは、以下の情報を持つとします。
users
| id | group_id | name |
|---|---|---|
| 1 | 1 | aaa |
| 2 | 1 | bbb |
| 3 | 3 | ccc |
groups
| id | code | name |
|---|---|---|
| 1 | g1 | xxx |
| 2 | g2 | yyy |
Userの一覧を表示するならば以下のような感じのコントローラーを作成します。
class UsersController < ApplicationController
active_scaffold :user do |config|
config.columns = [:id, :group, :name]
config.columns[:group].form_ui = :select
end
end
これで表示するとUser一覧にグループ情報としてGroupモデルのto_labelで指定した内容で一覧が以下のような感じで表示されます。
| id | group | name |
|---|---|---|
| 1 | g1:xxx | aaa |
| 2 | g1:xxx | bbb |
| 2 | g2:yyy | ccc |
ここで表示順を以下のようにgroups.codeで降順にして、さらにuser.nameの昇順にしたいとするとします。
| id | group | name |
|---|---|---|
| 2 | g2:yyy | ccc |
| 1 | g1:xxx | aaa |
| 2 | g1:xxx | bbb |
そのためにUserControllerに以下を追加します。
config.list.sorting = [{:group => :desc},{:name => :asc}]
でも、これでは以下のエラーが出てダメなのです。
Can't mix :method- and :sql-based sorting
それぞれ単独ならば問題なく動きます。
どうやらデフォルトでは、直接表示させているモデルに関するデータでソートする場合は、sqlでソートさせているのですが 関連するモデルの情報でソートする際は、データを持ってきてからActiveScaffold側でソートしているようです。
そしてソート手段が混ざるとダメなようです。
これをなんとかするには、以下のようにgroupsも検索対象に含めるように明示します。
config.columns[:group].includes = [:group]
config.columns[:group].sort_by :sql => "groups.code"
これでソートができるようになりました。
最終的なコントローラーは以下のような感じです。
class UsersController < ApplicationController
active_scaffold :user do |config|
config.columns = [:id, :group, :name]
config.columns[:group].form_ui = :select
config.columns[:group].includes = [:group]
config.columns[:group].sort_by :sql => "groups.code"
config.list.sorting = [{:group => :desc},{:name => :asc}]
end
end
2011-01-25
Railsのpublicフォルダにpukiwikiをいれてみた
Railsのpublicフォルダの下にpukiwikiをいれてみました。
ちなみにRailsはPassengerで動いています。
特に特別なこともせずに動きました。
publicフォルダの下で普通にphp動くものなのですねぇ。
pukiwikiでヘルプでも作って一緒に配布しようかなぁとか思っています。
pukiwikiはファイルベースのwikiだからRailsプロジェクトフォルダをまるまるコピーで
wikiのコンテンツも配布できるのがよさげな気がしています。
普通に別にpukiwikiを立てて、そこにヘルプとしてリンクをするのと変わらないかもしれませんが。
ちなみにWebrickではphpは動かずにたんなるテキストファイルみたいな感じでphpのソースが見えることになります。
ちなみにRailsはPassengerで動いています。
特に特別なこともせずに動きました。
publicフォルダの下で普通にphp動くものなのですねぇ。
pukiwikiでヘルプでも作って一緒に配布しようかなぁとか思っています。
pukiwikiはファイルベースのwikiだからRailsプロジェクトフォルダをまるまるコピーで
wikiのコンテンツも配布できるのがよさげな気がしています。
普通に別にpukiwikiを立てて、そこにヘルプとしてリンクをするのと変わらないかもしれませんが。
ちなみにWebrickではphpは動かずにたんなるテキストファイルみたいな感じでphpのソースが見えることになります。
2011-01-24
ActiveRecordで多対多の関係に属性を持たせる
ActiveRecordで多対多の関係を表現するには
has_and_belongs_to_many
を使うもんだと思い込んでいました。
ある人がある商品を買った場合では以下のような感じです。
has_and_belongs_to_many
を使うもんだと思い込んでいました。
ある人がある商品を買った場合では以下のような感じです。
class User < ActiveRecord::Base has_and_belongs_to_many :items end class Item < ActiveRecord::Base has_and_belongs_to_many :users end商品を一つづつしか買えないのならいいですが、たいてい複数個買えたりすると思います。 多対多の関係に何個買ったかという属性をつけたいと思ったわけです。 そんな時は、 has_many :through を使えばよかったことに今更に気づいてみました。 人と商品の関係を注文として定義することにします。
class User < ActiveRecord::Base has_many :orders has_many :items, :through => :orders end class Order < ActiveRecord::Base belongs_to :user belongs_to :item end class Item < ActiveRecord::Base has_many :orders has_many :users, :through => :orders endこれでOrderモデルに何個買ったかを定義させることができるというわけです。 このとき、うっかり has_many :orders を書き忘れて
class User < ActiveRecord::Base has_many :items, :through => :orders end class Order < ActiveRecord::Base belongs_to :user belongs_to :item end class Item < ActiveRecord::Base has_many :users, :through => :orders endと書いてしまうと ActiveRecord::HasManyThroughAssociationNotFoundError: Could not find the association という感じのエラーが出たりします。 以下のサイトを参考にさせていただきました。 http://wiki.usagee.co.jp/ruby/rails/RailsGuides%E3%82%92%E3%82%86%E3%81%A3%E3%81%8F%E3%82%8A%E5%92%8C%E8%A8%B3%E3%81%97%E3%81%A6%E3%81%BF%E3%81%9F%E3%82%88/Active%20Record%20Associations#v41bb3f5
2011-01-23
ActiveRecordでデータの履歴管理をする
RailsのActiveRecordでデータの履歴管理をするには、
acts_as_versioned
を利用するケースが多いようです。
ですが、2.3系でうまく動かす方法がよくわかりません。
で調べていたところ、
vestal_versions
というものがあり、こちらもよさげで2.3で利用できました。
使い方は、まずgemでインストール
gem install vestal_versions
で利用するRialsプロジェクトのconfig/environment.rbに
config.gem 'vestal_versions'
を記述。その後、
rake gems:install
script/generate vestal_versions
rake db:migrate
とすれば利用の準備が完了です。
履歴管理を行いたいModelに
versioned
とすれば、このModelで履歴管理ができます。
これでvestal_versions用のメソッドが追加されるのですが、重要そうなのは
version:現在の履歴version番号を返す
revert_to:データを元に戻す。元に戻すためにはversion番号とか、どれくらい前に変更したかとかを渡す感じ
ぐらいでいい気がします。
具体的な利用例は、
vestal_versions
に書いてあります。
acts_as_versionedでは
履歴管理を行いたいModelに対して専用の履歴管理テーブルを作成してデータをまるまるコピーしておく感じなのですが、
vestal_versionsでは
verions
という専用のテーブルが作成されて、これですべてのモデルの変更履歴管理をします。
acts_as_versionedでは、元のModelにmigrationで変更を加えたら、履歴テーブルにも忘れずに変更をいれないといけないようですが、vestal_versionsではその必要はなさそうです。
しかし変更履歴一覧みたいなものを見せるならば、
acts_as_versioned
では普通の1対多の結合みたいになっているので簡単に変更履歴を作成できそうです。
vestal_versionsでは変更部分のみが記録されているので、元のデータをModelとして復活させるには、
最初にversionで今のversionを取得して、
revert_toで必要なだけデータを戻す必要がありそうです。
特に履歴管理しなくてもいいのだけど、あったらあったで便利そうなことがあったので調べてみました。
他の履歴管理手段が以下のサイトで紹介されています。
http://ruby-toolbox.com/categories/activerecord_versioning.html
acts_as_versioned
を利用するケースが多いようです。
ですが、2.3系でうまく動かす方法がよくわかりません。
で調べていたところ、
vestal_versions
というものがあり、こちらもよさげで2.3で利用できました。
使い方は、まずgemでインストール
gem install vestal_versions
で利用するRialsプロジェクトのconfig/environment.rbに
config.gem 'vestal_versions'
を記述。その後、
rake gems:install
script/generate vestal_versions
rake db:migrate
とすれば利用の準備が完了です。
履歴管理を行いたいModelに
versioned
とすれば、このModelで履歴管理ができます。
これでvestal_versions用のメソッドが追加されるのですが、重要そうなのは
version:現在の履歴version番号を返す
revert_to:データを元に戻す。元に戻すためにはversion番号とか、どれくらい前に変更したかとかを渡す感じ
ぐらいでいい気がします。
具体的な利用例は、
vestal_versions
に書いてあります。
acts_as_versionedでは
履歴管理を行いたいModelに対して専用の履歴管理テーブルを作成してデータをまるまるコピーしておく感じなのですが、
vestal_versionsでは
verions
という専用のテーブルが作成されて、これですべてのモデルの変更履歴管理をします。
acts_as_versionedでは、元のModelにmigrationで変更を加えたら、履歴テーブルにも忘れずに変更をいれないといけないようですが、vestal_versionsではその必要はなさそうです。
しかし変更履歴一覧みたいなものを見せるならば、
acts_as_versioned
では普通の1対多の結合みたいになっているので簡単に変更履歴を作成できそうです。
vestal_versionsでは変更部分のみが記録されているので、元のデータをModelとして復活させるには、
最初にversionで今のversionを取得して、
revert_toで必要なだけデータを戻す必要がありそうです。
特に履歴管理しなくてもいいのだけど、あったらあったで便利そうなことがあったので調べてみました。
他の履歴管理手段が以下のサイトで紹介されています。
http://ruby-toolbox.com/categories/activerecord_versioning.html
2011-01-14
ActiveScaffoldで日付入力でカレンダーを利用する方法
RailsのScaffoldを便利にするActiveScaffoldで日付入力をする際にカレンダーを利用する方法です。
calendar_date_select
というのを入れれば勝手にカレンダーを使ってくれるようになります。
インストールは、
gem install calendar_date_select
で。
そして
config/environment.rb
に
config.gem "calendar_date_select"
を追加すれば、もうOKです。
これだけでカレンダーが使えるようになりました。
calendar_date_selectのインストールは、pluginとしてインストールすることもできるようなのですが、どうもgemで入れないとActiveScaffoldではうまく使えない気配です。
これでカレンダーは使えるようになるのですが、このままだと日付の形式が
August 12, 2007
みたいになっていて、ちょっといまいちです。
これを
2007/08/12
の形式にする方法は以下の通りです。
まず
config/environment.rb
に以下を追加します。
そして
public/javascripts/calendar_date_select/format_japanese.js
というjavascriptを以下の内容で作成します。
2011/1/17追記
カレンダーを日本語にする方法です。
public/javascripts/calendar_date_select/locale/ja.js
というjavaスクリプトを以下の内容で作成します。
文字コードはUTF-8で保存してください。
そしてlayoutなりActiveScaffoldを使うときに以下のように指定すればOKです。
active_scaffold_includesを呼べば、内部でcalendar_date_select_includesを呼んでいるので指定しなくても利用できるのですが、内部で呼んでいる時にはlocaleを渡していないので後で再度指定しちゃいました。
あとcalendar_date_selectには、テキストボックスにテキストを直接入力させずに、必ずカレンダーをクリックして入力させるoptionを指定できるのですが、ActiveScaffoldを利用しているときは、以下のようにoptionを渡します。
ちなみにopened_atが日付型のフィールドだと思ってください。
calendar_date_select
というのを入れれば勝手にカレンダーを使ってくれるようになります。
インストールは、
gem install calendar_date_select
で。
そして
config/environment.rb
に
config.gem "calendar_date_select"
を追加すれば、もうOKです。
これだけでカレンダーが使えるようになりました。
calendar_date_selectのインストールは、pluginとしてインストールすることもできるようなのですが、どうもgemで入れないとActiveScaffoldではうまく使えない気配です。
これでカレンダーは使えるようになるのですが、このままだと日付の形式が
August 12, 2007
みたいになっていて、ちょっといまいちです。
これを
2007/08/12
の形式にする方法は以下の通りです。
まず
config/environment.rb
に以下を追加します。
CalendarDateSelect::FORMATS[:japanese] = {
:date => "%Y/%m/%d",
:time => " %H:%M",
:javascript_include => "format_japanese"
}
CalendarDateSelect.format = :japanese
そして
public/javascripts/calendar_date_select/format_japanese.js
というjavascriptを以下の内容で作成します。
Date.prototype.getAMPMHour = function() { hour=Date.padded2(this.
getHours()); return (hour == null) ? 00 : (hour > 24 ? hour - 24 : hour
) }
Date.prototype.getAMPM = function() { return (this.getHours() < 12) ? ""
: ""; }
Date.prototype.toFormattedString = function(include_time){
str = this.getFullYear() + '/' + Date.padded2(this.getMonth() + 1) + '
/' +Date.padded2(this.getDate());
if (include_time) { hour=this.getHours(); str += " " + this.
getAMPMHour() + ":" + this.getPaddedMinutes() }
return str;
}
Date.parseFormattedString = function (string) {
var regexp = "([0-9]{4})(\/([0-9]{2})(\/([0-9]{2})" +
"( ([0-9]{1,2}):([0-9]{2})" +
"?)?)?)?";
var d = string.match(new RegExp(regexp, "i"));
if (d==null) {
return Date.parse(string); // Give javascript a chance to parse it.
}
var date = new Date(d[1], 0, 1);
if (d[3]) { date.setMonth(d[3] - 1); }
if (d[5]) { date.setDate(d[5]); }
if (d[7]) {
hours = parseInt(d[7], 10);
date.setHours(hours);
}
if (d[8]) { date.setMinutes(d[8]); }
return date;
}
これは、
http://code.google.com/p/calendardateselect/wiki/ChangingDateFormatCustom
とか
http://blog.champierre.com/archives/822
とかを参考にさせていただきました。
あとは、カレンダーの曜日とかの表示を日本語にしたり、calendar_date_selectで使えるオプションのforceとかをActiveScaffoldでも使えるようにしたいなぁと思っていますが、まだやり方不明です。
2011/1/17追記
カレンダーを日本語にする方法です。
public/javascripts/calendar_date_select/locale/ja.js
というjavaスクリプトを以下の内容で作成します。
文字コードはUTF-8で保存してください。
_translations = {
"OK": "OK",
"Now": "現在",
"Today": "今日",
"Clear": "閉じる"
}
Date.weekdays = $w("日 月 火 水 木 金 土");
Date.months = $w("1月 2月 3月 4月 5月 6月 7月 8月 9月 10月 11月 12月" );
そしてlayoutなりActiveScaffoldを使うときに以下のように指定すればOKです。
<%= active_scaffold_includes %> <%= calendar_date_select_includes :locale => "ja" %>ポイントは、active_scaffold_includesの後にcalendar_date_select_includesすることです。
active_scaffold_includesを呼べば、内部でcalendar_date_select_includesを呼んでいるので指定しなくても利用できるのですが、内部で呼んでいる時にはlocaleを渡していないので後で再度指定しちゃいました。
あとcalendar_date_selectには、テキストボックスにテキストを直接入力させずに、必ずカレンダーをクリックして入力させるoptionを指定できるのですが、ActiveScaffoldを利用しているときは、以下のようにoptionを渡します。
ちなみにopened_atが日付型のフィールドだと思ってください。
config.columns[:opened_at].options = {:popup => "force"}
bloggerに「ツイートする」やら「いいね」やらをいっぱいつけてみた
最近、他のブログさんを見るとTwitterへ「Tweetする」やらFacebookの「いいね」やらをよく見るのでマネして私もつけてみました。
それぞれ参考にしたのは、以下の通りです。
Twitterの「ツイートする」をつける
http://blog.umebara.com/2010/08/bloggertweet.html
Facebookの「いいね」をつける
http://cgod-kei.blogspot.com/2010/04/bloggerfacebooklike.html
ついでにブログの横に出ているTwitterの「Follow Me」のバッチもつけました。
http://jutememo.blogspot.com/2009/12/blogger-twitter-follow-me.html
さらについでにGREEにも「いいね」があるようなのでつけてみました。
http://toshiponnu.blogspot.com/2010/09/bloggergreesocial-feedback.html
前からつけていましたが、はてなブックマークのつけ方は以下の通りです。
http://blog.suz-lab.com/2010/01/blogger.html
さらに今回つけませんでしたが、mixiの「イイネ」のつけかたは以下が参考になりそうです。
http://blog.seino.biz/2010/12/bloggermixi.html
2011/1/17追記
以下の方法で記事の個別ページに関連記事リストを表示できるようになります。
http://www.kuribo.info/2009/08/blogger-2.html
それぞれ参考にしたのは、以下の通りです。
Twitterの「ツイートする」をつける
http://blog.umebara.com/2010/08/bloggertweet.html
Facebookの「いいね」をつける
http://cgod-kei.blogspot.com/2010/04/bloggerfacebooklike.html
ついでにブログの横に出ているTwitterの「Follow Me」のバッチもつけました。
http://jutememo.blogspot.com/2009/12/blogger-twitter-follow-me.html
さらについでにGREEにも「いいね」があるようなのでつけてみました。
http://toshiponnu.blogspot.com/2010/09/bloggergreesocial-feedback.html
前からつけていましたが、はてなブックマークのつけ方は以下の通りです。
http://blog.suz-lab.com/2010/01/blogger.html
さらに今回つけませんでしたが、mixiの「イイネ」のつけかたは以下が参考になりそうです。
http://blog.seino.biz/2010/12/bloggermixi.html
2011/1/17追記
以下の方法で記事の個別ページに関連記事リストを表示できるようになります。
http://www.kuribo.info/2009/08/blogger-2.html