我在另一个视图中有一个用户表单,它非常适合创建用户。即使他们已经是用户,我也希望人们填写此表单。如果用户存在然后更新
如果他们已经是用户,我希望表单更新他们的位置,如果他们输入任何内容并保存。
用户表单
<%= form_for(resource, as: resource_name, url: registration_path(resource_name)) do |f| %>
<%= devise_error_messages! %>
<div class="form-group">
<%= f.label :location, "Where are you based?" %><br />
<%= f.text_field :location, placeholder: "E.g. London", class: "full-width form-field" %>
</div>
<div class="form-group">
<%= f.label :email, "What is your email?" %>
<%= f.email_field :email, placeholder: "Enter email", class: "full -width form-field" %>
</div>
<div class="actions">
<%= f.button "GO", class: "btn btn-1R btn-orange full-width", id: "submit_button" %>
</div>
<% end %>
我想我可以做的模型before_validation
方法来检查该用户是否存在,如果不创建一个。这是正确的吗?
before_validation :check_user, :on => :create
def check_user
@user = User.where(email: self.email).first
unless @user.blank?
@user.update_attributes(:location => self.location)
@user.save
else
puts 'NEW USER'
end
end
这仍然抛出'电子邮件已被采取'的错误。
我该如何杀死'创建'方法,只是在这里引起更新方法?还是我这样做完全错了?
虽然这仍然不会运行设计标准验证吗?我也得到'未定义的方法'保存为真:TrueClass'运行这个。 – MikeHolford
是的,它会。你会得到未定义的方法错误,因为上面应该是user.update/user.update_attributes /你想更新你的用户的方案,然后self.resource = user。我会更新代码 – Hannah