2008-12-27 71 views
4

我有一個視圖可以顯着不同,具體取決於特定用戶選擇的「模式」。是否有可能在運行時加載Rails助手?

我以爲我會提取不同的行爲分成兩個不同的助手,然後讓這樣的代碼在控制器:

class MyController < ApplicationController 

case mode 
when 'mode1' 
    helper "mode1" 
when 'mode2' 
    helper "mode2" 
else 
    raise "Invalid mode" 
end 

etc... 

一旦正確的助手被加載,然後像一個聲明<%= edit_item% >,它在兩個助手中定義,將爲特定的「模式」加載正確的表單。

這在開發過程中非常有效,但在生產中,case語句只運行一次。然後,你堅持任何幫手第一次加載(杜!我應該知道這一點)。

我想過其他方法來實現我需要做的,但我仍然認爲這種使用幫手是一個很好的清潔改變視圖行爲的方式。

有沒有人知道我可以在運行時加載(或重新加載)助手?

TIA:約翰

+0

啊,古老的國家模式:http://en.wikipedia.org/wiki/State_pattern - 我的最愛之一!我希望我知道RoR,所以我可以幫忙。 – 2008-12-27 19:01:42

回答

1

我能想到的幾個方法可以做到這一點,但不知道加載模塊,你暗示。

加載不同的部分並根據狀態選擇要加載的部分。

<% if @mode = 'mode1 %> 
    Mode 1: 
    <%= render :partial => 'mode1' %> 
<% else %> 
    Mode 2: 
    <%= render :partial => 'mode2' %> 
<% end %> 

或者,如果你想保持這種邏輯出的觀點(這可能是一件好事),你可以把東西在你的控制器來呈現基於模式不同的操作:

def index 
    @mode = params[:query] 
    case @mode 
    when 'mode1' then render :action => "mode1" 
    when 'mode2' then render :action => "mode2" 
    else raise "Invalid mode" 
    end 
end 

這似乎比將該邏輯放在視圖中好得多。

1

做一些更多的挖這個問題後,我開始認爲這是一個愚蠢的想法......在運行時一個多用戶系統中唐」關於更換模塊的影響你看起來不錯。

除非有人想出一個改變我的想法的好主意,否則我會在一天結束時收回這個問題。

約翰 -

相關問題