将值从控制器内部的循环传递到视图
为简单起见,我使用一个简单的示例。将值从控制器内部的循环传递到视图
我有一个控制器的方法:
def test
@books.each do |book|
@book_id = "EMI:#{book.id}"
@book_test = ....(some function)
end
end
如何通过“@book_id” &“@book_test”值从循环到视图页面?
请注意,我不想在视图页面重复代码。只是想将循环中的值传递给视图页面。
你在测试方法中有@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
需要声明@ book_ids = @ book_tests = [] ... – 2013-04-25 13:23:07
嗯,感谢您的建议,我会这样做,然后 – Kim 2013-04-25 13:25:34
谢谢@Thahakp我编辑了我的答案:-) – user2319761 2013-04-25 13:27:37
你的控制器需要它应该有不必要的作品。
的作业是为更好的模型,从我在这个问题
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
所看到的是不是这样清洁剂?
[模型是业务逻辑的正确位置](http://stackoverflow.com/questions/5019794/when-to-use-helpers-vs-model)。 :) – 2013-04-25 13:34:02
我不确定你想如何工作,因为你只会得到一个@book_id变量(不是每本书都有一个)? – 2013-04-25 13:17:39
安迪是对的,那个循环只会给你最后一本书的编号。您应该将这些值存储到数组中并在视图中对其进行迭代。 – Tomanow 2013-04-25 13:20:39
我不清楚你在这里要做什么。你可以扩大一点吗?你是否试图渲染视图多次,或收集一堆值传递给视图?在循环内渲染视图没有明智的方法。 – 2013-04-25 13:22:03