我之前在rails中创建过没有问题的表单,但这是我第一次在模态中执行它并且我不确定是否会影响这些内容。我不认为它,但你永远不会知道。问题是新用户没有被保存,我没有得到有用的错误。这是我的形式,在模态中:
<div class="modal-body">
<%= form_for @user do |f| %>
<%= f.label :first_name %><br>
<%= f.text_field :first_name, class: 'form-control', :required => true %><br>
<%= f.label :last_name %><br>
<%= f.text_field :last_name, class: 'form-control', :required => true %><br>
<%= f.label :user_name %><br>
<%= f.text_field :user_name, class: 'form-control', :required => true %><br>
<%= f.label :password %><br>
<%= f.password_field :password_digest, class: 'form-control', :required => true%><br>
<%= f.label :password_confirmation %><br>
<%= f.password_field :password_confirmation, class: 'form-control', :required => true%><br>
</div> <!-- modal body -->
<div class="modal-footer">
<%= f.submit "Sign Up"%><br>
</div>
<% end %>
这是我的用户控制器中的内容:
def create
@user = User.create(user_params)
if @user.save
redirect_to root_path
else
redirect_to({:controller => 'application', :action => 'home'}, :notice => 'Account not created! Something is fishy.')
end
end
def user_params
params.require(:user).permit(:first_name, :last_name, :user_name, :password)
end
很可能,我错过了一些东西。我的问题是两部分:A)出了什么问题,B)如何阻止模态窗口关闭并让它向用户显示适当的错误,让他们有机会修复它?
答案 0 :(得分:0)
尝试:
@user = User.new(user_params)
而不是:
@user = User.create(user_params)
因为,您在此次通话后尝试save
用户。
当您使用create
时,会调用create
,然后调用save
。
如果您使用:User.new(user_params)
,它只会加载具有指定user_params
的用户对象,但不会保存它。在下一行中,当您调用:@user.save
时,如果有效,将保存用户对象。否则,不是。
此外,您可以尝试使用:@user.save!
代替@user.save
。因为,当您尝试使用save!
方法保存对象时,如果无法正确保存对象,则会引发异常。这样,你就会知道出了什么问题。
答案 1 :(得分:0)
观察元素/标签&#34;&#34;应该在form_for里面,因为关闭标签就在里面。
<%= form_for @user do |f| %>
<div class="modal-body">
......your stuff fields here
</div> <!-- modal body -->
<div class="modal-footer">
<%= f.submit "Sign Up"%><br>
</div>
<% end %>