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... ]