使用 Rails 3.2.9
我正在尝试使用 .build 而不是 .create 建立关联,但出现密码验证错误,我似乎无法找到解决方法。
评论如下:
我理解的保存项目的方式是使用 .build 构建的关联,在这种情况下,您实际上必须对所有者进行保存。如果您对@item 进行保存,它只会创建项目而不是关联(这意味着它在 current_owner.save 之前不会保存到数据库中)。当我对所有者进行保存时,由于密码不符合验证要求而出现错误。有没有办法在我保存时绕过验证,因为我需要为密码实施不同的解决方案,或者只是停止抱怨并使用 .create 而不是 .build。
下面给出了密码不符合验证错误
@item = current_owner.items.build(params[:item])
if current_owner.save
Do some other work with item
end
我想我可以做以下事情(出于某种原因,这对我来说似乎很脏,也许不是。想法?)
@item = current_owner.items.create(params[:item])
if !@item.nil?
Do some other work with item
end
表设置: 所有者:
- ID
- 姓名
- 加密密码
- 盐
项目:
- ID
- 姓名
物品所有者:
- owner_id
- item_id
楷模:
class Item < ActiveRecord::Base
attr_accessible :description, :name, :owner_ids
has_many :items_owner
has_many :owners, :through => :items_owner
end
class Owner < ActiveRecord::Base
attr_accessor :password
attr_accessible :name, :password, password_confirmation
has_many :items_owner
has_many :items, :through => :items_owner
before_save :encrypt_password
validates :password, :presence => true,
:confirmation => true,
:length => { :within => 6..40 }
end
class ItemsOwner < ActiveRecord::Base
attr_accessible :owner_id, :item_id
belongs_to :item
belongs_to :owner
end