我正在尝试通过创建一个项目来学习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)”
答案 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;