2012-07-07 24 views
27

Một số kiểm chứng thực là lặp đi lặp lại trong các mô hình của tôi:Rails đặt xác nhận trong một mixin mô-đun?

validates :name, :length => { :minimum => 2 }, :presence => true, :uniqueness => true 
validates :name_seo, :length => { :minimum => 2 }, :presence => true, :uniqueness => true 

Làm thế nào tôi sẽ đặt rằng trong một mixin? Tôi nhận được lỗi này nếu tôi chỉ cần đặt 'em trong một mixin

app/models/validations.rb:5: undefined method `validates' for Validations:Module (NoMethodError) 

Trả lời

44
module Validations 
    extend ActiveSupport::Concern 

    included do 
    validates :name, :length => { :minimum => 2 }, :presence => true, :uniqueness => true 
    validates :name_seo, :length => { :minimum => 2 }, :presence => true, :uniqueness => true 
    end 
end 

Các validates vĩ mô phải được đánh giá trong bối cảnh của Includer, không phải của các mô-đun (như bạn có lẽ đang làm).

+4

Tôi tin rằng nó thực sự nên là 'ActiveSupport :: Concern' thay vì' ActiveSupport :: Concerns' (Không cho phép tôi chỉnh sửa nó bởi vì nó chỉ là một bản chỉnh sửa ký tự.) –

+0

@KyleDaigle Đúng vậy. Tôi đã cập nhật bài đăng gốc. –

+0

Có cách nào để làm điều này trong đường ray 2 – CantGetANick

26

mô-đun bạn nên tìm một cái gì đó như thế này:

module CommonValidations 
    extend ActiveSupport::Concern 

    included do 
    validates :name, :length => { :minimum => 2 }, :presence => true, :uniqueness => true 
    validates :name_seo, :length => { :minimum => 2 }, :presence => true, :uniqueness => true 
    end 
end 

Sau đó, trong mô hình của bạn:

class Post < ActiveRecord::Base 
    include CommonValidations 

    ... 
end 

Tôi đang sử dụng ActiveSupport::Concern đây để làm cho đoạn code rõ ràng hơn một chút.

+1

Có thể kiểm tra nó trong Rails 2 không? Ví dụ trong Rails 3, bạn có thể sử dụng ActiveModel để tạo một lớp Test; kết thúc và bao gồm những gì chúng ta cần. và sau đó viết thông số kỹ thuật cho mô-đun này. Nhưng những gì về phiên bản Rails 2 là nó có thể? – oivoodoo

+2

http://weblog.jamisbuck.org/2007/1/17/concerns-in-activerecord – CantGetANick

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