【问题标题】:clever universal form partials in rails轨道中巧妙的通用形式部分
【发布时间】:2011-04-21 11:15:12
【问题描述】:

我有一个在整个应用程序中使用的货币小部件。 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 %>

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

【问题讨论】:

  • 我发现的一个可能的解决方法是使用 render_component 插件,它可以让我从当前控制器外部渲染一个动作......我只是想知道是否有更好的方法,并且如果以及为什么这可能是一个坏主意? github.com/vhochstein/render_component 因为原始渲染组件是在rails2之前提取的,我们生活在rails3时代。

标签: ruby-on-rails ruby-on-rails-3 partial-views partial renderpartial


【解决方案1】:

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

首先,就我而言,我想做的是在每个模型中都有一个名为 :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 %>

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

干杯

同人

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-13
    • 2020-12-10
    • 2020-11-22
    • 2015-03-11
    • 1970-01-01
    • 2011-05-10
    相关资源
    最近更新 更多