[英]create method adding 2 values and assigning to to an attribute in rails table
我試圖獲取行的先前余額並將其添加到變量中,然后將其添加到params輸入值中並將其分配給特定的列屬性。 如果我耙db:migrate並且表為空,它將說acctbal為零,然后炸開。 我如何僅當current_user首次存入資金時才將該屬性設為0,以使后續的存款可以從中建立。 如下面的代碼所示,將兩個值相加時,第二個“ +”給我一個未定義的nil錯誤,我只想將兩個值連接在一起,如何實現呢?
def create
#@account = Account.new(account_params)
# @account.save
# respond_with(@account)
@previous_balance = Account.where('user_id = ?',
current_user.id).order(:created_at).last.acctbal
@account = Account.new(account_params)
@account.email = current_user.email
@account.user_id = current_user.id
@account.acctbal = account_params[:deposit] + @previous_balance
respond_to do |format|
if @account.save
format.html { redirect_to accounts_url, notice: 'Thank you and
enjoy.' }
format.json { render :show, status: :created, location: @account }
else
format.html { render :new }
format.json { render json: @account.errors, status:
:unprocessable_entity }
end
end
end
我的表單不完整:
<%= form_for(@account) do |f| %>
<% if @account.errors.any? %>
<div id="error_explanation">
<h2><%= pluralize(@account.errors.count, "error") %> prohibited this
account from being saved:</h2>
<ul>
<% @account.errors.full_messages.each do |message| %>
<li><%= message %></li>
<% end %>
</ul>
</div>
<% end %>
<div class="field">
<%= f.label :credit, "Deposit Amount" %><br>
<%= f.text_field :credit, size: 40 %>
</div>
<div class="field">
<%= f.label :depotype, "Select Deposit Method" %><br>
<%= f.select :depotype, Account::DEPOSIT_TYPES, prompt: 'Select a deposit
method' %>
</div>
<div class="actions">
<%= f.submit 'Deposit Funds' %>
</div>
<% end %>
控制器中的params方法:
def account_params
# params[:account]
params.require(:account).permit(:created_at, :email, :credit, :debit,
:acctbal, :depotype)
end
end
我將一個previous_balance
方法添加到Account
模型:
# models/account.rb
def self.previous_balance_for_user(user)
where(user_id: user.id).order(:created_at).pluck(:acctbal).first || 0.0
end
需要注意的是pluck
剛剛返回的值acctbal
(或nil
)。
使用該方法,您的控制器可以更改為:
previous_balance = Account.previous_balance_for_user(current_user)
@account = Account.new(account_params.merge(
user_id: current_user.id,
email: current_user.email,
acctbal: previous_balance + account_params[:credit].to_f
))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.