代码之家  ›  专栏  ›  技术社区  ›  holden

rails中聪明的通用形式部分

  •  0
  • holden  · 技术社区  · 15 年前

    我有一个在整个应用程序中使用的货币控件。也就是说,用户将货币从欧元改为美元,或大约13种其他货币。我还有一些其他的用例,比如日期,但是这个用例是最容易解释的。Currency基本上只是通过调用Currency控制器来更新一个session变量,然后使用一些JS来重新加载页面,但是我只想获取页面的某些元素(即反映货币变化的元素,而不是其他元素)。。。

    $("#places_list").html("<%= escape_javascript(render :partial => 'places/list') %>");
    

    或者如果另一个控制器

    $("#locations").html("<%= escape_javascript(render :partial => 'locations/places') %>");
    

    但这些元素是特定于当前控制器的,即呈现特定于控制器的部分,如列表。。。(货币数学本身在一个应用程序助手中,因此没有新的逻辑发生),货币控制器很简单,是由不同控制器加载的一部分。(地点、地点等)

    除了在每个控制器中为这个目的指定一个操作之外,我如何使它的行为方式能够呈现特定于当前控制器的元素,以便我可以通过js智能地替换它们,而不是重新加载?也就是说,我可以把现在的控制员交给货币部

    <%= hidden_field_tag :info, controller.controller_name %>
    

    我不知道这些是否有意义,但我希望它是有意义的,至少在我自己的大脑里,如果不是在其他人的大脑里。

    1 回复  |  直到 15 年前
        1
  •  0
  •   sameera207    15 年前

    我试过一个小应用程序,下面是一个解决方案,

    为此,我需要为每个模型添加:info属性。你有几种方法

    2-快速而丑陋的方法是将my:info属性注入AR::基类(我做了;)

    在config/初始化器中创建一个文件货币.rb再加上这个代码

    module ActiveRecord
     class Base
       attr_accessor :info
     end
    end 
    

    在这之后,从你使用AR的任何视图中,都会有:info属性

    新用户

    <% form_for(@user) do |f| %>
      <%= f.error_messages %>
    
      <p>
        <%= f.label :name %><br />
        <%= f.text_field :name %>
      </p>
      <p>
        <%= f.label :info %><br />
        <%= f.text_field :info %>
      </p>
      <p>
        <%= f.submit 'Create' %>
      </p>
    <% end %>
    
    <%= link_to 'Back', users_path %>
    

    请注意:这不是一个很好的解决方案,但我认为你可以开始思考

    萨米拉