2013-04-25 237 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

相关问题