Rails noob: получение значения из базы данных и отображение на application.html.erb - PullRequest
0 голосов
/ 12 января 2012

краткое обновление Я мог бы даже не позаботиться о форме для отправки данных в базу данных, а вместо этого просто использовать консоль 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):

1 Ответ

1 голос
/ 12 января 2012

Вы можете сделать это через фильтр-ловушку - он позволяет вызывать метод (или несколько методов) для всех действий и, если необходимо, для всех контроллеров.Вы также можете явно исключить его из стрельбы для определенных действий и контроллеров.См. - http://apidock.com/rails/ActionController/Filters/ClassMethods/before_filter

Однако в вашем случае вам, вероятно, не будет доступно params [: 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>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...