Tuesday, September 7, 2010

[Rails] weird stuff: validate_uniqueness_of with :scope does not work

Running rails 2.3.8.

I have a two models defined like this

class Member
has_many :folders
before_save: create_default_folders

protected
def create_default_folders!
%w{Inbox Sent}.each do |folder|
unless self.folders.find_by_name(folder)
self.folders.create!(:name => folder, :deletable => false)
end
end
end
end


class Folder
belongs_to :member
# folder names must be unique for each user
validates_uniqueness_of :name, :scope => [:member_id], :allow_blank
=> false,
:case_sensitive => false, :message => 'already exists for this
member'
end

------ MembersController
def create
@member = Member.new(params[:member])

if @member.save
...
end
end

So as you can see, what I wish to get when I save a new Member are two
default folders colled (Inbox and Sent).
So I defined the after_save callback. I tested it in script/console
and it works whenever I build and save a Member.

However, as soon as I create a member through a controller-backed
form, the uniqueness validation gets tripped up. I get validation
error from my validates_uniqueness_of as "Folder already exists for
this member". Which shouldn't happen.

For some strange reason :scope gets ignored and thus uniqueness check
isn't properly scoped by member_id...

The weird part is that it all works in script/console, but not via web
forms.

Any suggestions???

Thanks in advance!

--
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.

0 Comments:

Post a Comment

Subscribe to Post Comments [Atom]

<< Home


Real Estate