2013-03-15 43 views
5

Tôi vừa mới bắt đầu với RoR và có câu hỏi: Làm cách nào để chèn dấu thời gian hiện tại (hoặc bất kỳ loại thời gian nào) vào mô hình? Dưới đây bạn thấy chức năng đăng nhập tạo ra.Cách chèn dấu thời gian vào cơ sở dữ liệu đường ray-cột

def create 
    @log = Log.new(params[:log]) 

    respond_to do |format| 
     if @log.save 
     format.html { redirect_to @log, notice: 'Log was successfully created.' } 
     format.json { render json: @log, status: :created, location: @log } 
     else 
     format.html { render action: "new" } 
     format.json { render json: @log.errors, status: :unprocessable_entity } 
     end 
    end 
    end 
+0

Bạn đã tạo mô hình bằng trình tạo đường ray chưa? –

Trả lời

18

Mô hình máy phát điện Rails tự động tạo created_atupdated_atdatetime trường trong cơ sở dữ liệu cho bạn. Các trường này được cập nhật tự động khi bản ghi được tạo hoặc cập nhật tương ứng.

Nếu bạn muốn tạo dấu thời gian theo cách thủ công, hãy thêm cột ngày giờ (ví dụ: timestamp_field) vào cơ sở dữ liệu và sử dụng gọi lại before_save trong mô hình của bạn.

class Log < ActiveRecord::Base 
    before_save :generate_timestamp 

    def generate_timestamp 
    self.timestamp_field = DateTime.now 
    end 
end 
+0

Nhưng tôi sẽ chèn dấu thời gian. – venumaer

+0

Tôi đã cập nhật câu trả lời bằng ví dụ về dấu thời gian thủ công. –

+0

Bạn không cần phải viết 'self.timestamp_field = DateTime.now'? –

2

Sử dụng trình tạo đường ray, ví dụ: rails generate model Log đường ray tạo hai trường dấu thời gian tự động cho bạn.

created_atupdated_at cả hai lĩnh vực sẽ được lấp đầy bởi Rails khi bạn tạo ra một kỷ lục mới làm Log.new sau đó save về kỷ lục đó hoặc Log.create Trường updated_at bị chỉ được cập nhật khi bạn cập nhật các thuộc tính của hồ sơ hoặc khi bạn sử dụng phương pháp này touch trên một ví dụ của mô hình.

Bây giờ, nếu bạn muốn tạo ra một lĩnh vực với kiểu timestamp bạn có thể làm cho một sự chuyển đổi có thêm một cột để mô hình của bạn như thế này

rails generate migration add_some_timestamp_field_to_logs my_timestamp_field:timestamp 

này sẽ tạo ra một sự chuyển đổi đó sẽ bổ sung thêm một cột tên là my_timestamp_field với loại timestamp, giống như created_atupdated_at

Các vấn đề liên quan