2012-11-21 17 views
5

Với Mysql tôi có thể sử dụng COALESCE để cập nhật chỉ các giá trị được emtpy trong một bảng.Rails (ActiveRecord) coalesce hoặc làm thế nào để cập nhật chỉ giá trị rỗng trong một bảng

Làm cách nào tôi có thể thực hiện việc này với Rails (ActiveRecord)?

Tôi không muốn tạo câu lệnh if cho mỗi cột trong bảng và tôi đoán có phải là cách để thực hiện nếu tôi chuyển băm ActiveRecord đến phương thức update_attributes.

Cảm ơn.

+0

..... – Meltemi

Trả lời

-2

Nó không phải như vậy rõ ràng những gì bạn đang yêu cầu nhưng nếu tôi hiểu đúng, bạn muốn một cái gì đó như thế này:

class Address < ActiveRecord::Base 
    attr_accessible :street, :city, :zip 
    def update_null_attributes(hash) 
    update_attributes(hash.keep_if { |k,v| __send__("#{v}_was").nil? }) 
    end 
end 

này sẽ đưa các hash của các thuộc tính bạn muốn cập nhật và thông qua chỉ những người mà đã ban đầu nil. Nó sử dụng ActiveModel::Dirty cho phương thức "# {v} _was".

+1

Ai xuống bình chọn câu trả lời này, bạn có muốn chia sẻ lý do không? Tôi không thể cải thiện câu trả lời nếu tôi không có gì sai với nó. –

+0

Điều này rất có thể đã bị bỏ qua vì nó không phải là nguyên tử. Nếu hai tài nguyên đọc cùng một bản ghi cùng một lúc, bạn sẽ mất ghi đầu tiên. Bạn sẽ cần phải khóa hồ sơ. – zach