2013-04-25 283 views
0

爲簡單起見,我使用一個簡單的示例。將值從控制器內部的循環傳遞到視圖

我有一個控制器的方法:

def test 

    @books.each do |book| 
    @book_id = "EMI:#{book.id}" 
    @book_test = ....(some function) 
    end 

end 

如何通過「@book_id」 &「@book_test」值從循環到視圖頁面?

請注意,我不想在視圖頁面重複代碼。只是想將循環中的值傳遞給視圖頁面。

+0

我不確定你想如何工作,因爲你只會得到一個@book_id變量(不是每本書都有一個)? – 2013-04-25 13:17:39

+0

安迪是對的,那個循環只會給你最後一本書的編號。您應該將這些值存儲到數組中並在視圖中對其進行迭代。 – Tomanow 2013-04-25 13:20:39

+0

我不清楚你在這裏要做什麼。你可以擴大一點嗎?你是否試圖渲染視圖多次,或收集一堆值傳遞給視圖?在循環內渲染視圖沒有明智的方法。 – 2013-04-25 13:22:03

回答

2

你在測試方法中有@books,那麼你爲什麼要在你的方法循環?直接在你的視圖文件中做,不需要重複。

或其他原因使兩個數組一樣@book_ids和@book_tests和收集您準備的價值觀和你的看法使用它們像下面這樣:

def test 
@book_ids=[] 
@book_tests=[] 
@books.each do |book| 
@book_ids << "EMI:#{book.id}" 
@book_tests << ....(some function) 
end 
end 
+2

需要聲明@ book_ids = @ book_tests = [] ... – 2013-04-25 13:23:07

+0

嗯,感謝您的建議,我會這樣做,然後 – Kim 2013-04-25 13:25:34

+0

謝謝@Thahakp我編輯了我的答案:-) – user2319761 2013-04-25 13:27:37

1

你的控制器需要它應該有不必要的作品。

的作業是爲更好的模型,從我在這個問題

class Book < ActiveRecord::Base 

    def book_id 
    "EMI:#{self.id}" 
    end 

    def book_tests 
    "some function" 
    end 
end 

# Then in the view 
@books.each |book| do 
    book.book_id 
    book.book_tests 
end 

所看到的是不是這樣清潔劑?

+1

[模型是業務邏輯的正確位置](http://stackoverflow.com/questions/5019794/when-to-use-helpers-vs-model)。 :) – 2013-04-25 13:34:02

相關問題