如果操作是這樣的:導軌如何將對象傳遞給視圖?
def show
@post = Post.find(params[:id])
end
那麼我可以這樣做:
<%= @post.title %>
它是如何的對象傳遞給視圖?
由於我的操作只有一行,所以使用什麼編程技巧或模式將@post
對象傳遞給視圖(模板)頁面?
我知道它假設視圖與動作名稱相同,但它是如何執行此操作的?
如果操作是這樣的:導軌如何將對象傳遞給視圖?
def show
@post = Post.find(params[:id])
end
那麼我可以這樣做:
<%= @post.title %>
它是如何的對象傳遞給視圖?
由於我的操作只有一行,所以使用什麼編程技巧或模式將@post
對象傳遞給視圖(模板)頁面?
我知道它假設視圖與動作名稱相同,但它是如何執行此操作的?
例如像這樣: 我們將變量myController的轉移到MyView的變量
class MyController
def my_action
@my_variable = 100
end
end
class MyView
def process_view_with_variables(variables)
puts variables.inspect # => [{"@my_variable"=>100}]
variables.each do |var|
var.each {|name,value| self.instance_variable_set(name,value)}
end
puts self.instance_variables # => @my_variable
# .. view_rendering here
end
end
# create new view and controller instances
my_controller = MyController.new
my_view = MyView.new
# call my_action method in MyController instance (which will initialized some variables)
my_controller.my_action
# let know about instance variables in our controller
puts my_controller.instance_variables.inspect # => ["@my_variable"]
# simple array, for store variables (this is like a proxy)
controller_variables = []
# transfer instance variables from controller to proxe
my_controller.instance_variables.each do |variable|
controller_variables << {variable => my_controller.instance_variable_get(variable)}
end
# let know which instance variables bow in proxy array
puts controller_variables.inspect # => [{"@my_variable"=>100}]
# call method process_view_with_variables which will transfer variables from proxy to view
my_view.process_view_with_variables(controller_variables) # => [{"@my_variable"=>100}]#
首先您需要查看binding class。 「Metaprogramming Ruby」(高度推薦的BTW)一書很好地概括了它們:「綁定是一個整體,作爲一個對象打包,想法是你可以創建一個綁定來捕獲本地範圍並將其運送。
然後看看ERB類應該回答你的問題。這個例子是直接從文檔:
require 'erb'
x = 42
template = ERB.new <<-EOF
The value of x is: <%= x %>
EOF
puts template.result(binding)
我希望有所幫助。
感謝本書裁判。 – Blankman 2010-09-23 18:28:00
可以隨時讀取軌道源代碼 – ennuikiller 2010-09-23 15:53:28