2014-05-02 101 views
2

我有兩個型號Post模型和評論model..First如果創建後,將有1後ID,然後同時創造一個評論,我可以使用POST_ID到後給協會之間的關聯等於1,但如果我創建的2帖子ID不存在,仍然會繼續前進,創造一個評論,但有「零」的ID ..我想,以確保註釋將創建只有一個評論相應的post_id存在。validates_associated驗證兩種模式

class Post < ActiveRecord::Base 
has_many :comments, dependent: destroy 
end 

class Comment < ActiveRecord::Base 
    belongs_to :post 
    validates_associated: post 
end 

根據我的理解,validates_associated檢查post模型中的驗證是否在創建評論前通過。澄清我,如果我錯了,這將是對於上述方案一個合適的解決方案?

回答

0

你可以做到這一點,以驗證post_id

class Comment < ActiveRecord::Base 
    belongs_to :post 
    validates :post_id, :presence => true 
end 
存在

或驗證關聯,您可以使用

class Comment < ActiveRecord::Base 
    belongs_to :post 
    validates_presence_of :post 
end 
+1

'驗證:POST_ID,存在:TRUE'採取任何價值,打造一個評論,但'證實:帖子,存在:TRUE'工作正常 – Rajanand02

+0

是的,這只是另一種選擇:) – RSB

1

首先,設置關聯的B/W後的首選方式這裏的評論是:

def new 
    @product = Product.first 
    @comment = @product.comments.build 
end 

def create 
    @product = Product.find(params[:comment][:post_id]) 
    @comment = @product.comments.create(comment_params) 
end 

對於你的特定場景,我假設post_id在PARAMS通過某種形式的東西來了,然後你想創建僅與特定post_id後存在的註釋。這可以通過在Comment模型添加應做到以下幾點:

validates :post, presence: true, allow_blank: false 

OR

validate :post_presence, on: :create 
def post_presence 
    errors.add(:post_id, "Post doesn't exist") unless Post.find(post_id).present? 
end 

你甚至可以做同樣的事情在控制器端與before_action/before_filter掛鉤。