0

我有一个在整个应用程序中使用的货币小部件。IE。用户将货币从 EUR -> USD 或大约 13 种其他货币更改。我还有一些其他用例,例如日期,但这个是最容易解释的。货币基本上只是通过调用货币控制器更新会话变量,然后使用一些 JS 重新加载页面,但我只想获取页面的某些元素(即反映货币变化而不是其他元素)......

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

或者如果另一个控制器

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

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

除了在每个特定于此目的的控制器中进行操作之外,我怎样才能使其行为方式能够呈现特定于当前控制器的元素,以便我可以通过 js 智能地替换它们,而不是重新加载?IE。我可以将当​​前控制器传递给货币

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

我不确定这是否有意义,但我希望它有意义,至少在我自己的大脑中,如果不是在其他人的大脑中。

4

1 回答 1

0

我尝试了一个小应用程序,下面将为您提供一个解决方案,

首先,就我而言,我想做的是在每个模型中都有一个名为 :info 的属性,以便我可以在我的视图中调用它 (<%= f.text_field :info %>) (请注意f 可以是模型的任何实例)

为此,我需要为每个模型添加 :info 属性。你有几种方法可以做到这一点

1 - 创建一个类(从 AR::Base 继承并从给定类继承所有其他模型)(但它需要一些代码更改)

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

在 config/initializers 中创建一个文件说 curreny.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 %>

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

干杯

同龄人

于 2010-10-05T21:19:24.930 回答