我需要消息在項目中有不同的佈局,是否有可能在rails中做這樣的事情?在rails中可以動態加載類佈局嗎?
Class Messages::New < @project? ProjectLayout : NormalLayout
end #i treid this, don't work, since @project has not been initiated.
感謝
我需要消息在項目中有不同的佈局,是否有可能在rails中做這樣的事情?在rails中可以動態加載類佈局嗎?
Class Messages::New < @project? ProjectLayout : NormalLayout
end #i treid this, don't work, since @project has not been initiated.
感謝
決定在控制器中的佈局而不是模型。您的ProjectsController可以使用它自己的ProjectLayout,然後MessagesController可以使用正常的佈局,如果你願意。
您只能在控制器級應用的佈局:
class MessagesController < ApplicationController
layout :project
end
Layout method documentation有關於如何做到有條件的佈局
而且,因爲這個問題是不清楚一個例子,你還可以設置佈局只一個動作與渲染選項。
render :action => 'new', :layout => 'layoutname'
這可能會幫助你
class MessagesController < ApplicationController
layout :get_layout
def get_layout
@project? ? 'ProjectLayout' : 'NormalLayout'
end
end
只能在controller
水平和個人action
級別應用的軌道佈局。在每個控制器
class MessagesController < ApplicationController
layout "admin"
def index
# logic
end
end
**以上線layout "admin"
獨特的佈局將每個消息控制器被調用時加載管理員佈局。對於這一點,你必須在你的layouts/admin.html.rb
文件創建的佈局。**
每個控制器
class MessagesController < ApplicationController
layout :dynamic_layout
def index
# logic
end
protected
def dynamic_layout
if current_user.admin?
"admin" # Show admin layout
else
"other_layout" # Show other_layout
end
end
end
#個人行動水平佈局 動態佈局如果你想顯示不同的佈局每個行動你可以做到這一點。
class MessagesController < ApplicationController
layout :dynamic_layout
def index
# logic
render :action => 'index', :layout => 'index_layout'
end
def show
# logic
render :action => 'show', :layout => 'show_layout'
end
end
我的兩分錢中的ApplicationController:
before_action :layout_by_action
@@actions = %w(new edit create update index)
def layout_by_action
if @@actions.include? params[:action]
self.class.layout 'admin'
else
self.class.layout 'application'
end
end