我有一个对象(事务),它是belongs_to用户和用户has_many事务。当我尝试在rails表单中创建这个对象时,我会得到以下错误:
undefined method `transaction_kind' for nil:NilClass
app/models/transaction.rb:10:in `create_transaction'
app/controllers/transactions_controller.rb:17:in `create'提交表单后通过我的控制台传递的params散列如下所示:
Parameters: {"utf8"=>"✓", "authenticity_token"=>"XXXXX", "transaction"=>{"transaction_kind"=>"Deposit", "user_id"=>"113", "credit"=>"99"}, "commit"=>"Submit Request", "lender_id"=>"113"}Transaction.rb看起来是这样的:
class Transaction < ActiveRecord::Base
belongs_to :user
after_save :create_transaction
attr_accessible :transaction_kind, :user_id, :credit, :debit, :created_at
def create_transaction
client = Restforce.new
credit = '012c00000004k5A'
debit = '012c00000004k55'
if @transaction.transaction_kind == "Deposit"
client.create!('Transaction__c', Account__c: self.salesforce_id, RecordTypeId: credit, Debit_Amount__c: self.debit, Credit_Amount__c: self.credit, Recorded_On__c: self.created_at, Status__c: 'New Transaction', Type: 'Deposit', Transaction_Type__c: self.transaction_kind)
else
client.create!('Transaction__c', Account__c: self.salesforce_id, RecordTypeId: debit, Debit_Amount__c: self.debit, Credit_Amount__c: self.credit, Recorded_On__c: self.created_at, Status__c: 'New Transaction', Type: 'Withdrawal', Transaction_Type__c: self.transaction_kind)
end
end
endnew.html.erb有以下表单代码:
<%= form_for [@user, @transaction], url: lender_transaction_path(@user) do |f| %>
<%= f.hidden_field :transaction_kind, :value => "Deposit" %>
<%= f.hidden_field :user_id, :value => @user.id %>
<%= f.label :credit, :class => "required" %>
<%= f.text_field :credit, :autofocus => :true, :class => "form-control margin-bottom-20 required"%>
<%= f.submit 'Submit Request', :class => "btn-u btn-u-primary" %>
<% end %>transactions_controller.rb
class TransactionsController < ApplicationController
before_filter :authenticate_user!
def new
@user = current_user
@transaction = Transaction.new
if @user.activated?
client = Restforce.new
@account = client.find('Account', @user.salesforce_id, 'Account_Id')
transaction_query = "select from where Account__c ='%s' AND " % @account.Id.to_s
@transactions = client.query(transaction_query)
end
end
def create
@user = current_user
@transaction = Transaction.create(transaction_params)
if @transaction.save
redirect_to new_lender_transaction_path(@user)
end
end
private
def transaction_params
params.require(:transaction).permit(:transaction_kind, :credit, :debit, :created_at)
end
end在这个问题上任何帮助都是很好的。或者任何关于如何进一步调试的想法。谢谢!
发布于 2014-10-02 14:54:41
您不能将实例变量从一个控制器传递到另一个模型,因此Transaction模型不知道@transaction是什么,因此假设它是一个nil
我会将代码修改为:
if self.transaction_kind == "Deposit"self会让它正常工作。如果不是,请尝试使用attr_accessor :transaction_kind或简单地将if transaction_kind == "Deposit"放在
此外,我认为最好将client.create!重构为:
Restforce.create!(...)这将避免您编写另一个client = Restforce.new行。
https://stackoverflow.com/questions/26163265
复制相似问题