模态表单未创建用户

时间:2015-08-20 01:52:25

标签: ruby-on-rails twitter-bootstrap

我之前在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)如何阻止模态窗口关闭并让它向用户显示适当的错误,让他们有机会修复它?

2 个答案:

答案 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 %>