2016-05-28 3 views
0

質問をする方法(または回答を得るために何を検索するのか)が分からないので、このトピックの初心者ですのであまりにも厳しく判断しないでください:Ruby:クラスの名前を使ってクラスオブジェクトを作成していますか?

私はSinatraでネストされたフォームを学習しています私はRubyに関係するものを理解していない何かに遭遇しました。

rake consoleでコードをテストしようとしているときにTeamと入力したところ、「チーム」という名前で作成されたオブジェクトが表示されていました。私はmy_team = Team.new(params)に入力した場合でも、私はNameError: undefined local variable or method 'man' for main:Object

を取得し、私が何かを入力した場合はundefined local variable or method 'params' for main:Object

は、「男の言うことをエラーメッセージが表示されますなぜのインスタンスのクラス結果の名前クラス?オブジェクトを作成するのに、Class_name.newが必要ですか? Rubyで

class Team 

    attr_accessor :name 
    TEAM = [] 

    def initialize(params) 
     @name = params[:team][:name] 
     TEAM << self 
    end 

    def self.all 
     TEAM 
    end 
end 

答えて

2

、すべてがこのようにクラスはオブジェクトである(それらはクラスClassのインスタンスであるオブジェクトである。

Team Classクラスのインスタンスである(「クラス」と短縮)に対しTeam.newTeamのインスタンスを作成します。クラスのインスタンスメソッド#newを経由して自分自身のインスタンスを作成することを可能にする特定の動作を、持っている。

さて、Rubyでメソッドに渡される引数は、現在で定義する必要がありますは、paramsが定義されていない場合は、Team.new(params)をバットですぐに使用することはできません。ローカル変数にアクセスする前にそれを定義するのは簡単です(

params = { team: { name: 'StackOverflow' } } 
Team.new(params) 

+0

「クラスクラスのインスタンス」と「クラスのインスタンス」の区別は、何が起きていたのかを説明しています。だから私は 'Team'とタイプした後、' Team.name'を実行して '' Team''を得ることができましたが、他のもの( 'Team.all'など)は動かなかったのです。また、例えば 'params'を使用してくれてありがとう。 – YCode

1

このコードスニペットをirbにロードし、TeamはクラスTeamのインスタンスを返しません。

Teamをインスタンス化するときに渡すパラメータ(params)は何かを設定する必要があります。 paramsが現在オブジェクトに割り当てられているローカル変数でない場合、rubyはTeamのインスタンス化を拒否します。

RailsやSinatraのようなフレームワークで作業している場合、paramsはクライアント(ブラウザ)がHTTPリクエストでアプリケーションに送信するハッシュです。 paramsハッシュアプ​​リに当たったときこの場合、それは次のようになります。おそらくあなたのアプリで何が起こっている

{:team => {:name => "Team 1's name"}}

をユーザーがブラウザで「チームの作成」などのボタンをクリックすることで、 「チーム名」などのフォームに入力されたデータは、paramsハッシュに入れられます。

あなたが提供した純粋なRubyコードを受け取ったばかりでTeam.new(params)だった場合、paramsに何も割り当てられていないとTeam.new(nil)に相当するコードになります。

ところで、それはRubyのすばらしさです。Team.allを使って以前に作成したチームの配列を返すことができます。

.allはクラスメソッドです。クラスメソッドについてもっと理解したいのであれば、little blog post on itがあります。

すべてが役に立ちますか?あなたが望むならば、もっと質問してください。

+0

ブログ記事をお寄せいただきありがとうございます。私は残りのコードを見て、 'Team.new(nil)'が私のViewsファイルの問題であるかどうかを調べるつもりです。 – YCode

+0

私はあなたのgithubリポジトリへのリンクを常に投稿することをお勧めします。そうすれば、人々はコードの周りをうまく操り、それをあなたのために働かせることができます。あなたはそれにリンクしていますか? – Andy

+0

byebugの使い方を学ぶ – Andy

関連する問題