简体   繁体   中英

Ruby on Rails creates child even if parent doesn't exist?

I just studied ruby on rails today and I'd like some help on creating proper associations. I have these models:

Comment:

class Comment < ActiveRecord::Base
  belongs_to :stammr_post
  validates :stammr_post_id, presence: true
  validates :content,  presence: true
end

Post:

class StammrPost < ActiveRecord::Base
  has_many :comments,  :dependent => :destroy
  validates :content,  presence: true
end

The thing is, whenever I create a Comment, and I enter a Stammr_post_id that doesn't exist, rails still accepts it as valid. Isn't that supposed to be invalid since a comment belongs to Stammr_post? The stammr_post should exist first before a comment could be made. How do I resolve this? Is it supposed to be automatic? Did I make a typo somewhere? Or do I need to do manual validation for that? Sorry, I'm kinda new to Ruby on Rails. I'm a former grails developer and I was used to the automatic associations thing. @_@

The correct way to do this is create the Comment through the parents association. That way you are taking advantage of the association;

So instead of doing this;

@comment = Comment.new(:stammr_post_id => 123)
@comment.save

do this;

# Find the StammrPost first. You may want to replace params[:stammr_post_id] 
# with your StammrPost id
@stammr_post = StammrPost.find(params[:stammr_post_id]) 
@comment = @stammr_post.comments.build() 
@comment.save

You could validate associated belongs_to object ( stammr_post ) instead of database column ( stammr_post_id ).

class Comment < ActiveRecord::Base
  belongs_to :stammr_post
  validates :stammr_post, :content, presence: true
end

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM