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)

On Aug 19, 2010, at 11:23 AM, Ze Ca wrote:

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

CACHE (0.0ms) SELECT * FROM “posts” WHERE (“posts”.“id” = 5)
Rendered rescues/_request_and_response (1.2ms)
.
For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en
.

Rob B.
[email protected] http://AgileConsultingLLC.com/
[email protected] 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 B. wrote:

On Aug 19, 2010, at 11:23 AM, Ze Ca wrote:

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

CACHE (0.0ms) SELECT * FROM “posts” WHERE (“posts”.“id” = 5)
Rendered rescues/_request_and_response (1.2ms)
.
For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en
.

Rob B.
[email protected] http://AgileConsultingLLC.com/
[email protected] http://GaslightSoftware.com/