2008-12-27 56 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

做一些更多的挖这个问题后,我开始认为这是一个愚蠢的想法......在运行时一个多用户系统中唐”关于更换模块的影响你看起来不错。

除非有人想出一个改变我的想法的好主意,否则我会在一天结束时收回这个问题。

约翰 -

相关问题