2017-07-18 72 views
0

试图将对象存储在数组中以在视图中迭代。控制器中的Rails一次性对象

在我的控制器:

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 %> #=> [] 

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

回答

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  

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

你打算添加更多的代码吗?我假设你是。因为,正如目前所写,整个实例化的东西似乎毫无意义。

你可以让你的客户类是这样的:

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 %> #=> [] 

或者,如果你喜欢你可以这样做:

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 

在这种情况下,你可以sti我会做:

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

我想贬低我的代码,以便更容易理解我正在尝试做什么。我使用了一个REST API,它为我提供了一系列客户端,每个客户端都有一个定义/项目列表。 – Corey

+0

'Clientele.new'给了我一个错误的参数数量(1代表0)错误。 :( – Corey

+0

哦,对不起,我没有在你的OP中看到关于你的'Clientele'类的更多信息,我会更新。 – jvillian

相关问题