Ruby on Rails创建一个虚拟对象,以后用作用户对象

时间:2014-08-11 21:01:22

标签: ruby-on-rails ruby ruby-on-rails-4

Member.rb:

has_secure_password
validates :password, length: { minimum: 6 }, allow_blank: true, allow_nil: true

控制器:

def add_member
    @group = Group.find(session[:group_id])
    @mem = @group.members.create(member_params)
    @mem.status = "Pending"
    if @mem.save
        token = SecureRandom.hex(10)
        @mem.token = token
        if @mem.save
            @message = @group.sentMessages.new
            @message.save
            @message.send_new_member_email(@mem)
        end
        redirect_to group_path
    else
        @members = @group.members
        render 'show'
    end
end

我有一个Member对象,由群组所有者创建。这本质上是一个虚拟对象,它包含一些数据并邀请成员加入该组。

从那里接收通知的用户可以选择创建帐户。我希望他们只需输入一个密码(我们已经有他们的电子邮件)来创建这个帐户。

群组所有者能够创建对象并且通知已经消失,但是一旦我添加了密码字段,群组所有者就无法再执行此操作了。提交表单后,页面将再次呈现,但仍会填充字段,并显示创建的新对象。但是,如果刷新页面,对象将消失,字段将再次变为空白。似乎if @mem.save失败但我不知道为什么这并不能解释看似正在创建的对象..我认为allow_blank: trueallow_nil: true会解决这个问题,但我仍然在体验问题。谢谢你的帮助。

1 个答案:

答案 0 :(得分:1)

has_secure_password

这是你问题的根源。根据{{​​3}}它附带了密码存在的验证,以及通过password_confirmation确认密码

但好消息是,根据文档,你可以否定这样的验证:

has_secure_password(validations: false)

这应该对你有用