簡體   English   中英

創建方法添加2個值並分配給rails表中的屬性

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM