NoMethodError в Bank_accounts # show - PullRequest
1 голос
/ 14 марта 2012

Я пытаюсь выучить Ruby on Rails, создавая проект, и я не могу разобраться с ошибкой, которую постоянно получаю.Если я не получу «NoMethodError», я получу что-то вроде «У вас есть нулевой объект, когда вы этого не ожидали!»- Я просто хочу просмотреть банковский счет и показать операции на этом банковском счете.Моя проблема может быть связана с контроллером, но я пробовал все виды разных вещей и не могу понять это.Большая помощь будет принята с благодарностью.Я думаю, что я включил все, если нет, я извиняюсь и включу то, что еще нужно.

Диспетчер банковского счета (я думаю, что ошибка в шоу):

def show
  @bank_account = BankAccount.find(params[:id])
  @transactions = @bank_account.transaction

  respond_to do |format|
  format.html # show.html.erb
  format.xml  { render :xml => @bank_account }
end

Просмотров: bank_accounts> show.html.erb

<% @transactions.each do |transaction| %>
  <tr>
    <td><%=h transaction.transaction_id %></td>
    <td><%=h transaction.dateD %></td>
    <td><%=h transaction.trans_type %></td>
    <td><%=h transaction.amount %></td>
    <td><%=h transaction.new_balance %></td>
    <td><%=h transaction.transaction_success %></td>
    <td><%= link_to 'Show', transaction %></td>
    <td><%= link_to 'Edit', edit_transaction_path(transaction) %></td>
    <td><%= link_to 'Destroy', transaction, :confirm => 'Are you sure?', :method => :delete %></td>
  </tr>
<% end %>

Я думаю, что это обратный след (извините, что не включил его)."BankAccount / app / controllers / bank_accounts_controller.rb: 17: in` show '"

Кроме того, если я сделаю следующее для контроллера банковского счета:

def show
  @bank_account = BankAccount.find(params[:id])
  @transactions = @bank_account.transactions

  respond_to do |format|
  format.html # show.html.erb
  format.xml  { render :xml => @bank_account }
end

Я получу этот SQLошибка: «ActiveRecord :: JDBCError: [SQLITE_ERROR] Ошибка SQL или отсутствует база данных (нет такого столбца: Transactions.bank_account_id): SELECT * FROM" транзакции »WHERE (« транзакции ».bank_account_id = 1)"

Ответы [ 3 ]

1 голос
/ 14 марта 2012

Похоже, ваша проблема в том, что BankAccount.find возвращает nil. Затем на следующей строке вы пытаетесь получить доступ к методу transaction на @bank_account, который выдает ошибку.

Убедитесь, что params[:id] имеет правильное значение.

0 голосов
/ 14 марта 2012

Возможно, вы захотите взглянуть на код вашей модели и код миграции.Чтобы иметь @ bank_account.transaction для возврата транзакции, они должны иметь отношение один к одному.

Ваша модель bank_account должна иметь

has_one :transaction

Ваша транзакция должна иметь

belong_to :bank_account

Ваш скрипт миграции при создании таблицы транзакций должен иметь что-то вроде

transaction.references :bank_account

Ссылка создаст поле bank_account_id в вашей таблице транзакций.Я думаю, это объясняет, почему у вас есть ошибка, что "нет такого столбца: Transactions.bank_account_id)"

0 голосов
/ 14 марта 2012

если в вашей модели BankAccount есть много транзакций, метод доступа к ним множественный:

@transactions = @bank_account.transactions
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...