将值从控制器内的循环传递到视图

时间:2013-04-25 13:11:02

标签: ruby-on-rails

为简单起见,我使用了一个简单的例子。

我有一个控制器方法:

def test

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

end

如何传递'@book_id'&从循环到视图页面的'@book_test'值?

请注意,我不想在视图页面中重复代码。只是想将循环中的值传递给视图页面。

2 个答案:

答案 0 :(得分: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

答案 1 :(得分: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

这样干净吗?