Bank_accounts中的NoMethodError#show

时间:2012-03-14 14:45:43

标签: ruby-on-rails ruby

我正在尝试通过创建一个项目来学习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:在'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”transactions“WHERE(”transactions“.bank_account_id = 1)”

3 个答案:

答案 0 :(得分:1)

您的问题似乎是BankAccount.find正在返回nil。然后,在下一行,您尝试访问transaction上的@bank_account方法,这会抛出错误。

确保params[:id]具有正确的值。

答案 1 :(得分:0)

如果您的BankAccount模型有许多交易,则访问它们的方法是复数:

@transactions = @bank_account.transactions

答案 2 :(得分:0)

您可能需要查看模型代码和迁移代码。 为了让@bank_account.transaction返回事务,它们中的两个必须具有一对一的关系。

您的bank_account模型应该

has_one :transaction

您的交易应该

belong_to :bank_account

创建事务表时,您的迁移脚本应该具有类似

的内容
transaction.references :bank_account

引用将在事务表中创建字段bank_account_id。 我认为它解释了为什么你有错误&#34;没有这样的列:transactions.bank_account_id)&#34;