2017-07-18 70 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

相關問題