2012-10-07 54 views

回答

6

您可以爲每個視圖設置一個部分,並使用session來存儲首選項,或者僅使用params

def index 
    # ... code here 
    @partial = params[:view] || "default" # "grid", "list", etc. 
end 

index.html.erb

<%= render @partial %> 

然後,你將節省每個視圖在控制器的視圖文件夾中,例如局部_grid.html.erb_list.html.erb,並_default.html.erb

編輯

在回答關於這個(今五歲)的答案評論,我撤銷/修改我原來的建議。將未驗證的參數傳遞給render永遠不是一個好主意,因爲它可能會暴露文件系統中的任意數據。反而會推薦白名單方法:

def index 
    @partial = whitelisted_partial || 'default' 
end 

def whitelisted_partial 
    %w(grid list).detect { |str| str == params[:view] } 
end 

以及向更多評論直接回應:

render partial: @partial, locals: { ... } 
+0

,如果我想通過一個本地的部分是什麼? – Manos

+1

由於這個非常古老的問題復活,我廢除了我原來的建議。永遠不要接受param作爲'render'的參數,或者使用白名單來實現它。 –

+0

謝謝你的快速和陳述性的迴應。 – Manos