简要更新 我甚至可能不愿意使用表单将数据提交到数据库而只是使用Heroku控制台,所以我唯一关心的是检索它。
原始问题
我已阅读所有书籍,但现在我正在尝试实施,我感到困惑
我创建了一个名为Total的模型(不是最佳名称,但这是另一个问题),包含三列profit
,number
和fees
。这是控制台打印输出
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):
答案 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>