我遇到的情況,我想有而我在佈局文件就是那個會被渲染視圖的名稱。我可以找到解決方案來查找哪個佈局將從視圖中包裝當前視圖,但不是相反。我怎樣才能找到哪個視圖正在呈現?Rails 3中,發現當前視圖,同時在佈局
回答
在Rails 3.0.3,我能看到的名字控制器和使用controller_name和action_name的操作。但那些沒有公開記錄(至少是行動名稱),所以我不會長期依賴它。
這可能是更好的猴子補丁模板渲染。在初始化程序中:
module ActionView::Rendering
alias_method :_render_template_original, :_render_template
def _render_template(template, layout = nil, options = {})
@last_template = template
_render_template_original(template, layout, options)
end
end
然後在佈局中使用@last_template。
我喜歡下面的方法,因爲可以減少代碼量好位在很多情況下。在application_controller.rb包括這樣的:
before_filter :instantiate_controller_and_action_names
caches_action :instantiate_controller_and_action_names
def instantiate_controller_and_action_names
@current_action = action_name
@current_controller = controller_name
end
然後,如果你的觀點對應一個動作,你只是做:
dosomething if @current_action == 'new'
這並不完全解決我的問題。我需要視圖的名稱,它並不總是與被調用的動作相同。 – 2011-02-11 20:43:29
然後,只需添加一個空白的動作,例如,無論結束。 – jschorr 2011-02-11 20:44:21
以下解決方案適用於Rails 3.1。將此代碼放入初始化程序中。 (導軌3.0.3答案在Rails 3.1中無法使用)
這使每個控制器都有一個@active_template變量。這是一個ActionViewTemplate類的實例。
的方法active_template_virtual_path方法返回的模板,如以下表格「控制器/行動」的名稱
class ActionController::Base
attr_accessor :active_template
def active_template_virtual_path
self.active_template.virtual_path if self.active_template
end
end
class ActionView::TemplateRenderer
alias_method :_render_template_original, :render_template
def render_template(template, layout_name = nil, locals = {})
@view.controller.active_template = template if @view.controller
result = _render_template_original(template, layout_name, locals)
@view.controller.active_template = nil if @view.controller
return result
end
end
- 1. 當我分割xml佈局時呈現的視圖不同
- 2. Rails 3和局部佈局
- 3. 如何在Android中打開當前佈局的web視圖?
- 4. 在當前佈局中填充列表視圖
- 5. 如何讓佈局中心3視圖
- 6. Rails 4 - 當前佈局的名稱?
- 7. 當前視圖:Swift 3
- 8. 如何從Rails中的佈局模板獲取當前視圖名稱?
- 9. android:如何訪問當前佈局中新使用佈局的視圖
- 10. 當一個列表視圖使用不同的佈局時出現問題
- 11. 同樣在父佈局中設置多個視圖/佈局
- 12. 無法在rails 3中渲染布局
- 13. 當前用戶已發佈和未發佈內容的視圖
- 14. 在rails中呈現不同的視圖
- 15. Rspec2 Rails 3測試視圖不包括佈局?
- 16. Rails 3中同時呈現在另一個控制器的視圖
- 17. 在佈局中引用視圖時出現空指針錯誤
- 18. 佈局視圖在小吃店出現時出現協調員視圖
- 19. Rails 3渲染局部外部視圖?
- 20. 使用ruby on rails在另一個局部視圖中渲染視圖時出現問題3
- 21. 視圖佈局rebol 3不工作
- 22. 在佈局中呈現強類型局部視圖MVC4剃刀
- 23. 在Rails中擴展現有佈局
- 24. Rails datetime_select在UTC發佈我的當前時間
- 25. Rails裏面視圖的佈局名稱
- 26. 在佈局中更新局部視圖
- 27. 即使在佈局中分佈視圖
- 28. Rails 3:獲取當前視圖的路徑幫助器?
- 29. 多級嵌套佈局中的Rails 3
- 30. 在Android中,當我的setContentView不在該佈局中時,如何在佈局中編輯視圖?
這對我很好。要添加更多的細節,在Rails 3中添加此到一個新的文件配置/初始化/ custom_renderer.rb,然後在視圖中我能夠訪問@ last_template.variable_name得到的,例如,「新」 – 2011-08-27 15:35:36