Limiting scope of :validates_uniqueness_of

I'm having a hard time limiting the scope of new comments to the Post
model. So, for validates_uniqueness_of :title in the comment.rb model,
that uniqueness would only be attached to the post I'm commenting to,
not globally among all comments in the application.

I tried putting this in comment.rb:

validates_uniqueness_of :title, :scope => :post

but got this error message in my terminal:

Processing CommentsController#create (for 127.0.0.1 at 2010-08-16
21:28:32) [POST]
  Parameters: {"comment"=>{"title"=>"rent"}, "commit"=>"Submit Your
Comment",
"authenticity_token"=>"z5AzsFgaJPdvGiTyy3Yeyb8f0RV+dmpdw5PanAadjOw=",
"game_id"=>"5"}
  Post Load (0.2ms) SELECT * FROM "posts" WHERE ("posts"."id" = 5)
  CACHE (0.0ms) SELECT * FROM "posts" WHERE ("posts"."id" = 5)
  Response Load (0.0ms) SQLite3::SQLException: no such column:
comments.posts: SELECT "comments".id FROM "comments" WHERE
("comments"."title" = 'rent' AND "comments".post = 5) LIMIT 1

ActiveRecord::StatementInvalid (SQLite3::SQLException: no such column:
comments.post: SELECT "comments".id FROM "comments" WHERE
("comments"."title" = 'rent' AND "comments".post = 5) LIMIT 1):
  app/controllers/comments_controller.rb:4:in `create'

Rendered rescues/_trace (110.5ms)
Rendered rescues/_request_and_response (1.2ms)
Rendering rescues/layout (internal_server_error)

I'm having a hard time limiting the scope of new comments to the Post
model. So, for validates_uniqueness_of :title in the comment.rb model,
that uniqueness would only be attached to the post I'm commenting to,
not globally among all comments in the application.

I tried putting this in comment.rb:

validates_uniqueness_of :title, :scope => :post

:scope => :post_id

but got this error message in my terminal:

Processing CommentsController#create (for 127.0.0.1 at 2010-08-16
21:28:32) [POST]
Parameters: {"comment"=>{"title"=>"rent"}, "commit"=>"Submit Your
Comment",
"authenticity_token"=>"z5AzsFgaJPdvGiTyy3Yeyb8f0RV+dmpdw5PanAadjOw=",
"game_id"=>"5"}
Post Load (0.2ms) SELECT * FROM "posts" WHERE ("posts"."id" = 5)
CACHE (0.0ms) SELECT * FROM "posts" WHERE ("posts"."id" = 5)
Response Load (0.0ms) SQLite3::SQLException: no such column:
comments.posts: SELECT "comments".id FROM "comments" WHERE
("comments"."title" = 'rent' AND "comments".post = 5) LIMIT 1

ActiveRecord::StatementInvalid (SQLite3::SQLException: no such column:
comments.post: SELECT "comments".id FROM "comments" WHERE
("comments"."title" = 'rent' AND "comments".post = 5) LIMIT 1):
app/controllers/comments_controller.rb:4:in `create'

Rendered rescues/_trace (110.5ms)
Rendered rescues/_request_and_response (1.2ms)
Rendering rescues/layout (internal_server_error)
-- Posted via http://www.ruby-forum.com/.

-- You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group.
To post to this group, send email to rubyonrails-talk@googlegroups.com.
To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe@googlegroups.com.
For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en.

Rob Biedenharn
Rob@AgileConsultingLLC.com http://AgileConsultingLLC.com/
rab@GaslightSoftware.com http://GaslightSoftware.com/

Ah, ok. That did it. I see now I would want to limit the scope to the
post_id column, instead of the post table.

Thank you!

Rob Biedenharn wrote: