0

尝试将对象存储在数组中以在视图中进行迭代。

在我的控制器中:

def expire
  @search = Search.new(search_params)
  if @search.valid?
    @clients = []
    @allClients = #value from REST API
    @allClients.each do |client|
      @clientele = Clientele.new
      @clientele["exp"] = client.experience  ##Also tried @clientele.exp = client.experience
      @clientele["email"] = client.email  ##Also tried @clientele.email = client.email
      @clients.push(@clientele)
    end
  end
end
class Clientele
  def exp
  end
  def email
  end
end  

在我看来,什么都没有显示,并且显示 @clients 数组会给出一个空数组:

<% @clients.each do |client| %>
  <%= client.exp %>
  <%= client.email %>
<% end %>
<%= clients %> #=> []

我不确定我做错了什么,我似乎不能只创建一个临时对象来存储值并将其存储到数组中。任何帮助或建议都会有所帮助。

4

1 回答 1

0

您永远不会初始化@allClients(至少在您提供的代码中)。所以,@allClientsnil并且@allClients.each不产生任何东西。

尝试更多类似的东西:

def expire
  @search = Search.new(search_params)
  if @search.valid?
    @clients = Client.all.map do |client|
      Clientele.new(
        exp: client.experience,
        email: client.email
      )
    end
  end
end    

Usingmap返回Array由块的结果填充的(这是一个初始化的Clientele对象)。

您要添加更多代码吗?我假设你是。因为,正如目前所写的那样,整个Clientele实例化似乎毫无意义。

您可以像这样创建您的 Clientele 类:

class Clientele

  def initialize(params={})
    params.each do |k,v|
      class_eval{attr_accessor k}
      send("#{k}=",v)
    end
  end

end 

然后你就可以按照我展示的方式实例化它。该class_eval位创建 getter 和 setter。该send位将传入的参数分配给它们各自的变量。

如果你想Clientele完全跳过这门课,你可以这样做:

def expire
  @search = Search.new(search_params)
  if @search.valid?
    @clients = Client.all.map do |client|
      {exp: client.experience, email: client.email}
    end
  end
end  

在这种情况下,您需要将您的更改erb为:

<% @clients.each do |client| %>
  <%= client[:exp] %>
  <%= client[:email] %>
<% end %>
<%= clients %> #=> []

或者,如果您喜欢 erb 的本来面目,您可以这样做:

def expire
  @search = Search.new(search_params)
  if @search.valid?
    @clients = Client.all.map do |client|
      OpenStruct.new(exp: client.experience, email: client.email)
    end
  end
end  

在这种情况下,您仍然可以这样做:

<% @clients.each do |client| %>
  <%= client.exp %>
  <%= client.email %>
<% end %>
<%= clients %> #=> []  
于 2017-07-18T16:30:50.510 回答