2012-01-15 25 views
5

Chỉ cần tự hỏi liệu có cách nào để thực hiện gọi lại có điều kiện trong Rails hay không. Tôi biết bạn có thể làm một xác nhận có điều kiện như vậy:Gọi lại có điều kiện trong mô hình của Rails?

validates_uniqueness_of :email, :if => (1==1) 

Tôi thường làm những việc như thế này trong callbacks tôi:

class LineItem < ActiveRecord::Base 
    belongs_to :invoice 
    belongs_to :line_item_group 

    before_create :set_invoice_id 
    def set_invoice_id 
    unless self.invoice_id 
     self.invoice_id = self.line_item_group.invoice_id 
    end 
    end 
end 

Nó sẽ là tuyệt vời để làm sạch mà lên một chút.

Trả lời

10
class LineItem < ActiveRecord::Base 
    before_create :set_invoice_id, :unless => :invoice_id 

    def set_invoice_id 
    self.invoice_id = line_item_group.invoice_id 
    end 
end 
+0

Bạn nói đúng, nó không phải là SQL chính thống, và tôi thích nó theo cách đó. :) Tôi sẵn sàng hy sinh tính bình thường cho ít tham gia hơn. – tybro0103

12

Có thể.

class Order < ActiveRecord::Base 
    before_save :normalize_card_number, :if => :paid_with_card? 
end 

Xem http://guides.rubyonrails.org/active_record_callbacks.html#conditional-callbacks để biết thêm về chủ đề này.

+0

Tôi nghĩ rằng OP muốn một người tái cấu trúc đoạn thứ hai, nhưng câu hỏi không rõ ràng ... – tokland

+0

Như tôi mong đợi. Chủ yếu là muốn đăng bài này ở đây để ghi lại. – tybro0103

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