【问题标题】:Rails form_for submit button not workingRails form_for提交按钮不起作用
【发布时间】:2014-03-21 11:13:52
【问题描述】:

感谢您的耐心等待。对 Rails 来说还是很陌生。

使用 Rails 3.2

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

用户模型和数据库似乎都可以正常工作。如果我从 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

提交不会导致任何类型的错误 - 根本不会导致任何事情发生。所以日志中没有有价值的信息。

提前感谢您的任何见解。

编辑:从 /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 %>

【问题讨论】:

    标签: ruby-on-rails-3 forms


    【解决方案1】:

    关于仔细编码有一个很好的小课:

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

    应该是:

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

    结束标签可以带来很大的不同。

    【讨论】:

    • 同样的问题,完全不同的代码。教训:如果表单中的按钮不起作用,那么有人在某处忘记了关闭 >。
    【解决方案2】:

    我认为问题在于您没有将错误传递给您的 shared/error_messages 部分。我认为你必须在那里传递@user。但我不确定,因为我没有看到 shared/error_messages 部分。我想得到它给你更详细的答案。

    【讨论】:

    • 谢谢@nickolay。我已经从 shared/error_messages 部分添加了文本。我已经调用了 中的部分。为了使实例变量在此视图中可用,我还需要做些什么吗?
    • @knolljm,尝试如下:stackoverflow.com/questions/10531762/…
    • 我认为所有验证工作正常,因为在控制台中我能够保存有效用户,而无效用户会被拒绝。机器在引擎盖下工作正常。我认为问题可能出在表单本身或用于提交表单的按钮上,但除此之外我没有任何想法。
    【解决方案3】:

    将控制器中的这一行:@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
    

    对我来说效果很好!

    【讨论】:

      【解决方案4】:

      如果您来到此页面,想知道为什么您的按钮未提交,请检查以下内容:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-10-11
        • 1970-01-01
        • 2013-04-09
        • 1970-01-01
        相关资源
        最近更新 更多