0

私の Rails サイトには、ActionController と移行 (データベース) を持つ Person という名前のモデルがあります。コンソールを使用して、このテーブルにいくつかの行を挿入しました (そして、そこに保存しました!)。PersonController には、データベースにあるすべての人をリストしたい "list" メソッドがあります。

def list
    @persons = Person.all
end

しかし、人のビューの list.html.erb ファイルでは、この配列にアクセスできません。次のようなものを書こうとしています: <% @persons.each do |r| %> は、@person が nil であるというエラー クレームを発生させます。

ここで何か間違ったことをしていると思います。結論として、コントローラーからビューにデータベースを渡す方法と、それを表示する方法を教えてください。ありがとう

4

3 に答える 3

0

コントローラーの変数は@personsありません@person。あなたが得ているエラーはです@person is nilPersonそれが問題でない場合は、Rails がモデル名に単数形を使用し、それ以外の場合は複数形を使用peopleして、テーブルとコントローラに名前を付けることを覚えておいてください。

これで問題が解決しない場合は、実際のファイル名と、コントローラーの最初の行を他の関連コードと共に投稿してください。

幸運を!

于 2013-08-03T01:02:30.817 に答える
0

コントローラーからビューにデータを転送するために使用している方法は適切です。私の推測では、 Person.all が結果を返していないということです。つまり、コンソールを介してデータベースにデータが入力されていません。dbディレクトリのseeds.rb経由でデータを追加してから、rake db:seedを実行してみてください。それはあなたのためにそれをするはずです。また、通常、モデルのリストは「index」ルートを介して実行されます。ルート「リスト」の代わりにそれを使用することをお勧めします。

この投稿をチェックして、コンソールを正しく使用していることを確認することもできます: how to add data to database from rails console

*****************編集*******************

インデックスを使用してモデルのリストを表示するには、routes.rb ファイルを開き、 people リソースを追加して person モデルのすべてのルートを生成します。

resources :people

これにより、ルートのインデックス作成、表示、編集、作成、更新、および破棄が行われます (rake routes を実行して、すべてのルートのリストを表示します)。これらすべてを必要としない場合は、resource コマンドで only: および except: を使用して、作成されるルートを制限できます。例

resources :people, only: index

次に、使用する各ルートに一致するようにコントローラーを更新する必要があります。したがって、'list' の代わりに、index、show、edit、update、create、および destroy を使用できます。

def index
  @people = Person.all
end

インデックス アクション定義の例です。次に必要なのは、index.html.erb のようなアクションに一致するビューだけです。データベースに人がいる場合は、インデックス アクション中に @people 変数に含まれている必要があり、それを使用して各人を一覧表示できます。何人かの人に試してもらいたい場合は、コンソールを使用するか、routes.rb で resources コマンドを使用して作成した show アクションを使用するか、seed.rb ファイルを使用して rake db:seed を実行します。

于 2013-08-03T00:50:01.970 に答える