ruby-on-rails – 是否可以在运行时加载Rails助手?

根据特定用户选择的“模式”,我的视图可能会有很大差异.

我以为我会将不同的行为提取到两个不同的Helper中,然后在Controller中有这样的代码

class MyController < ApplicationController

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

etc...

加载正确的帮助程序后,会出现类似<%= edit_item%>的语句.,在两个助手中定义,将为特定的“模式”加载正确的形式.

这在开发中非常有效,但在生产中,case语句只运行一次.然后你就会被第一次加载的任何助手困住(Duh!我应该知道的.)

我已经想到了其他方法来实现我需要做的事情,但我仍然认为使用Helpers是改变View行为的一种很好的干净方法.

有谁知道我如何在运行时加载(或重新加载)一个助手?

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

这似乎比在视图中放置该逻辑要好得多.

相关文章

validates:conclusion,:presence=>true,:inclusion=>{...
一、redis集群搭建redis3.0以前,提供了Sentinel工具来监控各...
分享一下我老师大神的人工智能教程。零基础!通俗易懂!风趣...
上一篇博文 ruby传参之引用类型 里边定义了一个方法名 mo...
一编程与编程语言 什么是编程语言? 能够被计算机所识别的表...
Ruby类和对象Ruby是一种完美的面向对象编程语言。面向对象编...