Rails form_for提交按钮不工作



感谢您的耐心等待。对Rails还是个新手。

使用Rails 3.2

为一个简单的应用程序制作注册页面。我的问题是,表单上的提交按钮不会产生任何效果,无论表单中的信息是否有效。

User模型和数据库似乎都工作良好。如果我从rails控制台手动添加一个用户,它将把它添加到数据库中。据我所知,问题似乎出在form_for.

生成的表单中。

这是有问题的页面:

<% provide(:title, 'Sign up') %>
<h1>Sign up</h1>
<div class="row">
    <div class="span6 offset3>
        <%= form_for(@user) do |f| %>
            <%= render 'shared/error_messages' %>
            <%= f.label :name %>
            <%= f.text_field :name %>
            <%= f.label :email %>
            <%= f.text_field :email %>
            <%= f.label :password %>
            <%= f.password_field :password %>
            <%= f.label :password_confirmation, "Confirmation" %>
            <%= f.password_field :password_confirmation %>
            <%= f.submit "Create my account", class: "btn btn-large btn-primary" %>
        <% end %>
    </div>
</div>

这是我的用户控制器:

  def show
    @user = User.find(params[:id])
  end
  def new
    @user = User.new
  end
  def create
    @user = User.new(params[:user])
        if @user.save
            flash[:success] = "Thank you for signing up! Please check your email to confirm your account."
            redirect_to @user
        else
            render 'new'
        end
    end
end

Submit不会导致任何类型的错误——根本不会导致任何事情发生。所以日志里没有什么有价值的信息。

提前感谢您的建议。

编辑:添加/shared/_error_messages.html中的代码。erb部分
<% if @user.errors.any? %>
  <div id="error_explanation">
    <div class="alert alert-error">
      The form contains <%= pluralize(@user.errors.count, "error") %>.
    </div>
    <ul>
    <% @user.errors.full_messages.each do |msg| %>
      <li>* <%= msg %></li>
    <% end %>
    </ul>
  </div>
<% end %>

这里有一个关于仔细编码的小教训:

<div class="row">
    <div class="span6 offset3>
        <%= form_for(@user) do |f| %>

应该是:

<div class="row">
    <div class="span6 offset3**"**>
        <%= form_for(@user) do |f| %>

表单未提交的其他原因:

检查:

  1. …你已经得到了有效的Html(被接受的答案)。
  2. …你的表单中没有required: true(这是隐藏的)并且没有显示(这花了我生命中两个痛苦的小时来发现-希望它没有白费。)

我认为问题是你没有把错误传递给你的shared/error_messages部分。我认为你需要传递@user。但我不确定,因为我没有看到shared/error_messages部分。我希望它能给你更详细的答案。

将控制器中的@user = User.new(params[:user])行替换为@user = User.new(user_params)

总是在你的控制器中,users_params方法应该是这样的:

def user_params
      params.require(:user).permit(:name, :email, :password,
                                   :password_confirmation)
end

相关内容

  • 没有找到相关文章