Rails noob:从数据库获取价值并在application.html.erb上显示

时间:2012-01-12 04:51:18

标签: ruby-on-rails

简要更新 我甚至可能不愿意使用表单将数据提交到数据库而只是使用Heroku控制台,所以我唯一关心的是检索它。

原始问题

我已阅读所有书籍,但现在我正在尝试实施,我感到困惑

我创建了一个名为Total的模型(不是最佳名称,但这是另一个问题),包含三列profitnumberfees。这是控制台打印输出

t = Total.first
 => #<Total id: 1, profit: 500, number: 7, fees: 40, created_at: "2012-01-12 04:21:33", updated_at: "2012-01-12 04:21:58"> 

(注意,我假设此条目可用于localhost:3000,如果在开发数据库上进行)

我提供此数据的最简单的地方(由于我的网页布局)在application.html.erb,所以我有一个这样的小桌子。当您查看此表时,您可以通过在实例变量@t.profit @t.number@t.fees上调用“利润”来了解我希望如何显示数据。

<table class = "condensed-table" >
        <thead>
          <tr>

            <th>Profit </th>
            <th>Number of Trades</th>
            <th> Fees</th>
          </tr>
        </thead>
        <tbody>
          <tr>


            <td>$<%= @t.profit  %> </td>
            <td><%=  @t.number %></td>
            <td><%=  @t.fees %></td>
          </tr>
          </tbody>
      </table>

所以现在这只是从数据库中获取数据,创建实例变量以便我可以调用@ t.profit的问题,就像我在控制台中所做的那样

ruby-1.9.2-p290 :019 > t.profit
 => 500 

因此,在Total.rb model中使用application.html.erb并进行演示,我认为我需要这样做....

@t = Total.find(params[:id])

从数据库中获取数据,但是我该怎么称呼该方法?我应该把它放在哪里使它工作?

例如,如果我有一个页面控制器和一个页面视图,我可以在视图中创建一个索引操作,如

def index
@t = Total.find(params[:id])
end

然后我可以做@t.profit(我假设)。但是,如果我做了类似的事情,我的表格将无法在我的网站的每个部分提供数据。

我试着把它放在application_controller.rb

 def index

    @t = Total.find(params[:id])

  end

并收到此错误消息

NoMethodError in Posts#index

Showing /Users/me/Sites/enki2/app/views/layouts/application.html.erb where line #73 raised:

undefined method `profit' for nil:NilClass

Extracted source (around line #73):

1 个答案:

答案 0 :(得分:1)

您可以通过过滤器挂钩执行此操作 - 它允许为所有操作调用方法(或多个方法),并且如果需要,可以为所有控制器调用。您还可以明确地将其排除在某些操作和控制器的触发之外。见 - http://apidock.com/rails/ActionController/Filters/ClassMethods/before_filter

但是,在您的情况下,您可能不会在每个控制器的每个动作调用中都有params [:id]。如果表格需要作为总体布局的一部分包含在内,您可能需要一个不会更改的ID。您可以使用acts_as_singleton插件 - https://github.com/stephencelis/acts_as_singleton。然后你可以在部分本身中使用它:

    <% @t = Total.instance -%>
    <td>$<%= @t.profit  %> </td>
    <td><%=  @t.number %></td>
    <td><%=  @t.fees %></td>

或者你可以简单地假设它永远是第一个:

    <% @t = Total.first -%>
    <td>$<%= @t.profit  %> </td>
    <td><%=  @t.number %></td>
    <td><%=  @t.fees %></td>