English 中文(简体)
在运行时加载Rails Helper是否可能?
原标题:
  • 时间:2008-12-27 18:17:28
  •  标签:

我有一个视图,根据特定用户选择的模式,可以有很大差异。

我认为我会将不同的行为提取到两个不同的帮助程序中,然后在控制器中使用这样的代码:

class MyController < ApplicationController

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

etc...

一旦正确的帮助程序已加载,那么像 <%= edit_item %> 这样的声明,在两个帮助程序中都有定义,将会为特定模式加载正确的表格。

这在开发中运行得很好,但在生产中,case语句只运行一次。然后你就会卡在了最先加载的帮助程序上(哎呀!我应该知道的)。

我已经考虑了其他方法来实现我需要做的事情,但我仍然认为使用Helpers来改变视图的行为是一种不错干净的方式。

有人知道我如何在运行时加载(或重新加载)辅助程序吗?

TIA:约翰

最佳回答

我可以想到一些方法来做这件事情,但不确定你所建议的加载模块。

加载不同的部分,并根据状态选择要加载的部分。

<% 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

这似乎比将这种逻辑放在视图中要好得多。

问题回答

在深入研究这个问题后,我开始认为这是一个愚蠢的想法……在多用户系统上运行时替换模块的影响看起来不太好。 (zài shēn jìn yán jiū zhè ge wèn tí hòu, wǒ kāi shǐ rèn wéi zhè shì yī gè yú chǔn de xiǎng fǎ……zài duō yòng hù xì tǒng shàng yùn xíng shí tì huàn mó kuài de yǐng xiǎng kàn qǐ lái bù tài hǎo.)

除非有人提出一个聪明的想法改变我的想法,否则我将在今天结束前撤回这个问题。

约翰





相关问题
热门标签