【问题标题】:How to calculate and display values from variables in Rails如何在 Rails 中计算和显示变量的值
【发布时间】:2012-06-06 04:13:17
【问题描述】:

我正在使用 Ruby on Rails/Jquery Mobile 开发一个 Web 应用程序。

SQLite 'Inventory' 模式由existingfixture:string、replacementfixture:string 和quantity:integer 组成。还有另外两个表,称为 oldlights 和 newlights。这些仅包含分别用于现有夹具和替换夹具的选项。 Oldlights 和 newlights 都有 lightname:string 和 value:integer,其中 value 是给定灯光名称使用的瓦数。

我还希望我的程序显示现有灯具与替换灯具的瓦数差异。 我希望能够有另一列说明每年节省多少瓦特,但我不知道该怎么做。这些值在 oldlights/newlights 中关联。但是,我不知道如何访问它们并在单独的列中使用它们执行数学方程。

从数据库中显示值的代码:

<fieldset class="ui-grid-c"><center>
         <div class="ui-block-a"><%= inventory.existing %></div>
         <div class="ui-block-b"><%= inventory.replacement %></div>
         <div class="ui-block-c"><%= inventory.quantity %></div>
         <div class="ui-block-d"><%= link_to 'Remove', [inventory.client, inventory], 
               :confirm => 'Are you sure?',
               :method => :delete %></div></center>
</fieldset>

添加库存的代码

    <%= form_for([@client, @client.inventories.build]) do |f| %>
       <fieldset class="ui-grid-c">
         <div class="ui-block-a"><%= f.select :existing, Olight.all.collect{|p| [p.name]}, { :include_blank => true } %></div>
         <div class="ui-block-b"><%= f.select :replacement, Nlight.all.collect{|p| [p.name]}, { :include_blank => true } %></div>
         <div class="ui-block-c"><%= f.number_field :quantity, "data-mini" => "true" %></div>
         <div class="ui-block-d"></div>
       </fieldset>
       <%= f.submit 'Add Inventory'%>
     <% end %>

【问题讨论】:

    标签: ruby ruby-on-rails-3 html jquery-mobile sqlite


    【解决方案1】:

    塞巴斯蒂安部分正确。 (解析灯具名称将不起作用,因为在“1-4' 40W-T12-ESMB”命名中,40 不是灯具的瓦数,而是单个 4 英尺 T-12 灯的瓦数,而工程并不像“3-4' 40W-T12-ESMB” 灯具的瓦数那么简单 == 3 倍于“1-4' 40W-T12-ESMB” 灯具的瓦数。总的灯具瓦数取决于除了灯泡功率之外,还有许多其他因素。)

    您应该阅读this page! “第 3 节 - 轻松制作选择框”以获取有关如何设置下拉列表的更多信息——我喜欢使用 options_for_Select 进行构建。我相信您想要显示名称的表单,但新旧灯具的 id 是存储在您的数据库中的。

    在您的 rails 控制器中,当您保存库存组合(现有、替换和计数)时,您使用新旧灯具 ID 来查找它们的瓦数,进行数学运算,然后存储节省的值。显示页面时,所有数据都应该存在。

    在样式说明中,我会将 Olight/Nlight.all.collect 代码移出页面模板并移入控制器,设置视图使用的实例变量...

    @existing = Olight.all.collect{|old| [old.name, old.id]}
    @replacement = Nlight.all.collect(|new| [new.name, new.id]}
    

    【讨论】:

    • 我从概念上理解您的解决方案,但不知道如何完全实现它。如果我保存 ID 而不是您建议的名称,我如何根据 ID 执行查找。例如,如果我按照您在此处的建议进行操作, 将显示 ID 号而不是名称,因此要显示名称,我必须将其更改为 Olight.name where Olight.id =库存。现有。处理这个的语法是什么?
    • o_O 认为我找到了 那么我也可以做到 和基于它的数学。 :D 这应该可以解决我现在的问题。谢谢大家
    • 酷,很高兴你取得了进展。我不得不承认对你的应用有点好奇。
    【解决方案2】:

    谢谢你要做很多事情:

    • 首先,您必须从新的和旧的中获取瓦特。为此,有两种解决方案:

      您创建一个正则表达式以从名称中提取瓦特,或者您在灯光上添加一个字段,用户可以在其中指定瓦特。

    • 其次,在单击“添加库存”时,您向服务器发送一个 ajax 调用,其中包含“newWatts”和“oldWatts”等额外参数。在服务器端创建操作时,您计算节省的能量并将其保存在数据库中。

    你明白吗?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-06-11
      • 1970-01-01
      • 1970-01-01
      • 2021-05-21
      • 2017-11-11
      • 2019-10-27
      相关资源
      最近更新 更多