从视图中定位一个类

时间:2013-08-02 16:16:57

标签: ruby api model-view-controller ruby-on-rails-4

我正在使用Ruby 2.0.0和Rails 4。

我正在尝试访问下面创建的类,并在View中迭代它。我的控制器中的puts行正常工作并输出数据,因此我知道它已正确设置。

但是,当我尝试在View中打印项目时,它会出现以下错误:

动作#列表中的NoMethodError 未定义的方法`each'代表nil:NilClass

所以显然我没有正确地定位课程。我该怎么做?我已经阅读了几个不同的问题/教程,但实施起来没有运气。

按照Mattherick的(进一步)说明后,我的代码现在看起来像这样:

型号:

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 %>

2 个答案:

答案 0 :(得分: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

你想用list-method做什么?

<强>更新

我更新了模型和控制器的索引操作。

答案 1 :(得分:0)

@newList包含一个新的ListItem实例。所以你不能在它上面做.each方法。

如果你想在@newList中使用多个对象,你需要做

@newList = ListItem.all 

在控制器方法中(最好将其放在def index方法而不是def new

如果你想只访问单个对象,那么你最好忘记每个循环并做...

<td><%= @newList.name %></td>