[Rails] Controller 和 View 之間傳送資料的原理

# controllers/blogs_controller.rb
class BlogController < ApplicationController
def show
@id = params[:id]
end
end
# views/blogs/show.html.erb
<h1>Frist Post</h1>
<%= @id %>

在 Rails 的 view 中可以取用 instance variable 的原因在於 Rails 內部運作了下面的 code:

kontroller = BlogController.new
kontroller.send(:show)
ERB.render('show.html.erb', kontroller.instance_variables)

將 BlogController 的 instance variables 傳給了 show.html.erb,所以在 view 中才能取用。

參考:
- GoRails
- 關於send方法: Ruby 的 Dynamic Dispatch 技巧