rails:552
From: Kenta Hashimoto <kem@c...>
Date: Wed, 02 Nov 2005 14:52:31 +0900
Subject: [rails:552] Re: Model のメソッド
はしけむです。
複数のモデルで共通に使えるメソッドはどうやったら
記述できますでしょうか?
最初は、単に継承すればよいと考えていたのですが、
単に継承すると、Single Table Inheritance として
扱われてしまうのではないかと思います。
●モジュールを作ってincludeすればよいでしょうか?
しかし、モジュール内でクラスメソッドを定義する方法が
いまひとつ分かりません。
また、その場合、そのようなモジュールの置き場はRailsで
用意されていますか。
●それとも、ActiveRecordのソースをいじってしまった方が
はやいでしょうか?あまりやりたくありませんが。
どういうことをやりたいかといいますと、
今、開発中のサイトでは、何かをリスト表示するときに、
リストされる範囲をURLで指定できるようにしようとしています。
そこで、あるモデルの中に、以下のようなクラスメソッドを作ってみました。
@params変数の、pageで、何ページ目かを表し、limitで、1ページ
あたりのレコード数を表します。
def self.find_limit( limit , params , *args )
page = ( params[ "page" ] || 1 ).to_i
limit = ( params[ "limit" ] || limit ).to_i
first = args.first
args_hash = args[ 1 ]
args_hash[ :limit ] = limit
args_hash[ :offset ] = ( page - 1 ) * limit
find( first , args_hash )
end
こんな風に使うイメージです。
@items = Item.find_limit( 10 , @params ,
:all ,
:conditions => "Title != ''" )
これを、Itemだけではなく、他のモデルからも使えるようにしたい
ということです。
Kenta Hashimoto wrote:
> gorouさん、babieさん、ありがとうございます。
>
> クラスメソッドという概念があったんですね。
> 実は、RailsをはじめてからRubyをはじめたので、
> Rubyもnewbieです。
>
> self. を付けたところ、無事に関数を使えました。
> ありがとうございました。
>
> babie wrote:
>
>>--- Kenta Hashimoto <kem@c...> からのメッセージ:
>>
>>
>>>はしけむです。
>>>
>>>またまた混乱しています。
>>>
>>>Itemというモデルがあったとして、
>>>Item.find を呼び出せるような別のメソッドを作りたいです。
>>>
>>>次のような方法を試したのですが、うまく動きませんでした。
>>>
>>>app/model/item.rbに、以下のように書き、
>>>
>>> class Item < ActiveRecord::Base
>>> def aaa( *args )
>>> find( *args )
>>> end
>>> end
>>>
>>>app/controller/item_controller.rbで以下のようにすると、
>>>
>>> class ItemController < ApplicationController
>>> def list
>>> @items = Item.aaa( :all )
>>> end
>>> end
>>>
>>>以下のようなエラーになってしまいます。
>>>
>>> undefined method `aaa' for Item:Class
>>
>>
>>「Item クラスに aaa というメソッドは定義されていません」とあります。
>>上記の定義ではオブジェクトを生成せずに aaa メソッドは使えません。
>>
>>クラスメソッドにする必要があるので、
>> def self.aaa(*args)
>>としてみて下さい。
>>
>>
>>
>>--
>>ML: rails@r...
>>使い方: http://QuickML.com/
>>Web Site: http://wiki.fdiary.net/rails/
>>ML Archives: http://www.fdiary.net/ml/rails/
>
>
> --
> ML: rails@r...
> 使い方: http://QuickML.com/
> Web Site: http://wiki.fdiary.net/rails/
> ML Archives: http://www.fdiary.net/ml/rails/
--
ML: rails@r...
使い方: http://QuickML.com/
Web Site: http://wiki.fdiary.net/rails/
ML Archives: http://www.fdiary.net/ml/rails/
548 2005-11-02 04:32 [kem@c... ] Modelのメソッド 549 2005-11-02 04:58 ┣[yu1@t... ] 550 2005-11-02 04:59 ┗[babie7a0@y... ] 551 2005-11-02 05:22 ┗[kem@c... ] -> 552 2005-11-02 06:52 ┗[kem@c... ] 553 2005-11-02 09:32 ┣[moriq@m... ] 555 2005-11-02 10:49 ┃┗[kem@c... ] 554 2005-11-02 09:44 ┗[don@n... ] 557 2005-11-02 11:01 ┗[kem@c... ] 558 2005-11-02 11:14 ┣[don@n... ] 560 2005-11-02 11:43 ┃┗[kem@c... ] 559 2005-11-02 11:28 ┗[toykyo@t... ]