pass parameter to layout

使用layout有兩種方法

一種是寫在action裡,可以對每個不同的action指定不同的layout , 如果要傳參數的話就直接在後面加上 'locals'

class XxxxxController < ApplicationController
  def index
    render layout:"my_layout" , locals:{params1:"aa" , params2:"qq"}
  end
end

另一種是寫在controller的最上面,這樣是所有的action都會套入一樣的layout

class XxxxxController < ApplicationController
layout "my_layout" 
end

但是這種方式無法在後面加上locals的參數,如果用這種方式要傳參數給layout的話就要用一些小技巧
1.使用before_action,這邊有要注意的一點是透過before_actiont要傳到layout的變數一定要是instance variable。

class XxxxxController < ApplicationController
before_action :layout_params
layout "my_layout"

private 
  def layout_params
    @params = {params1:"aa" , params2:"qq"}
  end
end
view
<%= @params[:params1] #=>"aa" %>

2 . 使用helper_method,return的參數就不限定是local variable或是instance variable

class XxxxxController < ApplicationController
helper_method :layout_params
layout "my_layout"

private 
  def layout_params
    params = {params1:"aa" , params2:"qq"}
  end
end
view
<%= layout_params[:params1] #=>"aa" %>
comments powered by Disqus