В общем, я бы ответил, что ваш объект AcitveRecord может содержать любые поля, и вы отображаете в представлениях только то, что вы хотите. В скриптах rails есть задача создания леса, но она заключается только в создании некоторой модели установки, контроллера и представления. Когда я работаю с Rails, я вообще не использую ./script/generate scaffold
. Скорее я генерирую только модель и контроллер отдельно. Часть представления я добавляю вручную.
ActiveRecord только отображает данные из базы данных в некоторые красивые объекты. Что вы делаете с этим, зависит от вас.
В соответствии с разделением между правилами представления и бизнес-правилами, я думаю, что следующие примеры позволят вам понять, как с этим обращаться в Rails.
Для вашего примера счета-фактуры я бы создал представление следующим образом:
<h1>Invoices</h1>
<table>
<tr>
<th>Invoice #</th>
<th>Date</th>
<th>Name</th>
<th>No. of line items</th>
etc
</tr>
<% @invoices.each do |invoice| %>
<tr>
<td><%= invoice.number %></td>
<td><%= invoice.date.to_s %></td>
<td><%= invoice.name %></td>
<td><%= invoice.line_items.count %></td>
etc.
</tr>
<% end %>
</table>
Или даже поместить строку с данными счета-фактуры в отдельный частичный фрагмент и отобразить его в представлении выше. Я предполагаю, что в вашей модели у вас есть:
# Invoice model
has_many :line_items
Теперь давайте рассмотрим пример кредитной карты. Я бы сделал это так:
# In CreditCard model add method
def fraudulent?
#put here some logic that returns true or false
end
Тогда, по вашему мнению, при выдаче этой кредитной карты:
<div <%= @credit_card.fraudulent? ? 'class="show_in_red"' : '' %>
here you can show whatever you want
</div>
Или даже создать помощника для него:
# credit card helper
def add_show_in_red(credit_card)
credit_card.fraudulent? ? 'class="show_in_red"' : ''
end
# in Rails 3 or earlier version with plugin that puts `h` method by default
# your helper should have additional safe_html! call
def add_show_in_red(credit_card)
(credit_card.fraudulent? ? 'class="show_in_red"' : '').safe_html!
end
и в поле зрения:
<div <%= add_show_in_red(@credit_card) %>>
here you can show whatever you want
</div>