2012-03-14 4 views
1

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

Bank Account Controller Show (я думаю, что ошибка в шоу):

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/приложение/контроллеры/bank_accounts_controller.rb: 17: в` шоу '"

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

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 или отсутствующая база данных (нет такого столбца: transaction.bank_account_id): SELECT * FROM« транзакции »WHERE (« транзакции ».bank_account_id = 1)«

+0

Можете ли вы опубликовать обратную линию? Это должно привести вас к проблеме. – EndangeredMassa

ответ

0

если ваша модель BankAccount имеет много сделок, метод доступа к ним во множественном числе:

@transactions = @bank_account.transactions 
+0

Привет, я попытался оба из них, и не повезло, я не получить «неопределенный метод' транзакций для # <Массив: 0xa70099>» Вот мои модели: bank_account.rb класс' BankAccount

+0

возможно BankAccount.find возвращается ноль – qwertoyo

+0

Если я использую "BankAccount.find (: все)" в консоль рельсов возвращает все данные. И если я использую «BankAccount.find (1)», он возвращает данные. Значит, он не возвращает ниль? –

1

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

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

+0

Если я использую «BankAccount.find (: all)» в консоли rails, он возвращает все данные. И если я использую «BankAccount.find (1)», он возвращает данные. Не следует ли изменять параметры [: id] на основе, если у меня есть, например, http: // localhost: 8080/bank_accounts/1? Кроме того, если я использую @bank_account = BankAccount.find (1), я до сих пор получаю эту ошибку: «ActiveRecord :: JDBCError: [SQLITE_ERROR] Ошибка SQL или отсутствующая база данных (нет такой колонки: transaction.bank_account_id): SELECT * FROM" транзакции "WHERE (" transaction ".bank_account_id = 1)" –

+0

Вы запустили 'rake db: migrate'? – EndangeredMassa

0

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

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

has_one :transaction 

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

belong_to :bank_account 

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

transaction.references :bank_account 

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