2017-02-21 47 views
0

我已經產生了軌道支架以生成一個名爲交易模型,其中有:自動創建如何在ruby中爲rails模板中的某些模型變量賦值而無需用戶輸入它們?

from(int) 
to(int) 
amount(double) 
status(string) 
kind(string) 
start(datetime) 
effective(datetime). 

一個表單,這種效果。我想知道的是,有沒有辦法只從用戶那裏獲得一些這些值,並自動添加其他值?在這種情況下,用戶需要輸入數量和種類。狀態應始終默認爲「掛起」,並且開始應該有當前的日期和時間。有效應爲空。

回答

1

您可以在許多方面

首先做到這一點:

您可以使用Active Record Callbacks來完成此操作。在模型中app/models/transaction.rb

before_create :assign_default_attributes 

def assign_default_attributes 
    self.status = 'pending' if self.pending.blank? 
    self.start = Time.now if self.start.blank? 
end 

添加回調:請確保您刪除的狀態,並開始從控制器允許PARAMS有效。

修改app/controllers/transactions_controller.rb創建行動。

def create 
    transaction = Transaction.new(status: 'pending', start: Time.now) 
    transaction.assign_attributes(transaction_params) 
    if transaction.save 
    redirect_to transactions_path, notice: 'Transaction Created' 
    else 
    flash[:alert] = 'Enter Valid data' 
    render :new 
    end 
end 

注:請確保您刪除的狀態,並開始從控制器允許PARAMS有效。

+0

謝謝。你的第一種方法的工作 – Akhshay

+0

建議在遷移或Model..Not在控制器中設置默認值。 – Milind

0

我認爲你需要的默認值

  1. status,設置的默認值。

    在遷移添加此添加默認值columns-

    t.string :status, default: "Pending"

檢查Migration api更多細節

  • start date,你可以在你的表格中設置今天的時間。

    <div class="form_group"> 
         <label>Start time:</label></br> 
         <%= f.datetime_select :starts_at , :class=>"form-control",:start_year => Date.current.year, :end_year => Date.current.year,:selected=> Date.today, :order=> [:day, :month, :year],:start_year=> Time.now.year,:default=> 1.days.from_now,:prompt=> {day: 'Choose day', month: 'Choose month', year: 'Choose year'},:placeholder=>"Enter start time",:required=>true %> 
    
        </div> 
    
  • 檢查datetime_select API的更多細節。

    +0

    感謝您的回答 – Akhshay

    +0

    希望它有幫助。 – Milind

    1

    您可以添加遷移更改默認值:不要使用start

    class ChangeDefaultValueForStatus < ActiveRecord::Migration 
        def change 
        change_column :transactions, :status, :string, default: "Pending" 
        change_column :transactions, :effective, :datetime, default: nil 
        end 
    end 
    

    ,您可以使用內置的時間戳來自動獲得一個記錄被創建或更新時的日期和時間:

    class AddTimestampsToTransactions < ActiveRecord::Migration 
        def change_table 
         add_column(:transactions, :created_at, :datetime) 
         add_column(:transactions, :updated_at, :datetime) 
        end 
    end 
    
    +0

    謝謝。我是新來的鐵軌,所以這有助於 – Akhshay

    相關問題