0

Ruby 2.0.0 と Rails 4 を使用しています。

以下で作成したクラスにアクセスして、ビューで反復しようとしています。Controller の puts 行は正しく機能し、データを出力しているので、適切に設定されていることがわかります。

ただし、ビュー内のアイテムを印刷しようとすると、次のエラーが表示されます。

nil:NilClass の Actions#list 未定義メソッド「each」の NoMethodError

したがって、明らかにクラスを正しくターゲットにしていません。これをどのように行う必要がありますか?私はいくつかの異なる質問/チュートリアルを読んだことがありますが、実装はうまくいきませんでした。

マテリックの(さらに)指示に従った後、私のコードは次のようになります。

モデル:

class ListItem < ActiveRecord::Base
attr_accessor :value, :name, :type, :details, :available, :date, :id
#This calls and API which contains JSON data I am trying to display
def self.mylist
    mylist = folder_list('sub', 'tld', $myAuthID, path='/')
end

end

コントローラ:

class ListItemsController < ApplicationController
def new
    @list_item = ListItem.new
end

def index
    @list_item = ListItems.mylist
end
end

意見:

<%= @list_items. each do |item| %>
<%= item.name %>
<% end %>
4

2 に答える 2

1

mvcパターンをチェックしていないと思いますか?:)

クラスを反復することはできません。クラスのオブジェクトを反復することはできます

# app/models/list_item.rb
class ListItem < ActiveRecord::Base
  attr_accessor :value, :name, :type, :details, :available, :date, :id

  # Update
  def self.mylist
    # your api call
  end

end

# app/controllers/list_items_controller.rb
class ListItemsController < ApplicationController

  def new
    @list_item = ListItem.new
  end

  # Update
  def index
   @list_items = ListItem.mylist
  end

end

# app/views/list_items/new
<%= form_for @list_item do |f| %>
  <% # your form fields %>
<% end %>

# app/views/list_items/index
<%= @list_items. each do |item| %>
  <%= item.name %>
<% end %>

この基本に関する詳細情報: http://guides.rubyonrails.org/getting_started.html

そして、リストメソッドで何をしたいですか?

アップデート:

コントローラのモデルとインデックスアクションを更新しました。

于 2013-08-02T17:54:04.857 に答える
0

@newList には、ListItem の単一の新しいインスタンスが含まれます。したがって、そのメソッドを実行することはできません.each

@newList に複数のオブジェクトが必要な場合は、次のようにする必要があります

@newList = ListItem.all 

コントローラーメソッド内 ( よりもdef indexメソッド内に配置する方が良いdef new)

単一のオブジェクトにアクセスしたいだけなら、 each ループを忘れて...

<td><%= @newList.name %></td>
于 2013-08-02T16:30:53.953 に答える