在 Rails HTML 文件的 Ruby 中检查 verify_recaptcha 的结果

Check for result of verify_recaptcha in Ruby on Rails HTML file

我正在尝试从 verify_recaptcha 中获取布尔结果,该结果已在我的应用程序控制器中实现。

来自控制器的代码:

def create
        #render plain: params[:student].inspect
        @student = Student.new(student_params)

        if verify_recaptcha(model: @student) && @student.save
            redirect_to @student
        else
            render 'new'
        end
    end

HTML代码:

<h1 class="col-md-12">New Student</h1>
              <div class="col-md-12">
                  <%= form_with scope: :student,url: students_path,local: true do |form|%>

                  <p>
                        <%= form.label :name %><br>
                        <%= form.text_field :name%>
                  </p>
                  <p>
                        <%= form.label :student_id,'Student ID' %><br>
                        <%= form.text_field :student_id%>
                  </p>
                  <p>
                        <%= form.label :course %><br>
                        <%= form.text_field :course%>
                  </p>
                  <%= recaptcha_tags%>
                  <p>
                        <%=form.submit 'Create Student'%>
                  </p>
                  <%end%>
                  <%= link_to 'Back', students_path %>
              </div>

编辑:这是我想在 recaptcha 失败时实现的目标。 到目前为止,当 recaptcha 失败时,网页只会重新加载而不会转到下一页。我想要做的是创建一个指示错误数量的警报。原来我无法在 HTML 中使用 verify_recaptcha。有什么建议吗?

如果你想在视图中使用 verify_recaptcha 的结果,你可以将结果分配给控制器中的某些东西,可能是这样的:

def create
    @student = Student.new(student_params)

    @recaptcha_succeeded = verify_recaptcha(model: @student)

    if @recaptcha_succeeded && @student.save
        redirect_to @student
    else
        render 'new'
    end
end

现在在视图中您应该可以参考 @recaptcha_succeeded

但是,通过将模型传递给 verify_recaptcha,也应该向模型添加错误,在本例中为 @student.errors。该信息也将在视图中可用。 recaptcha gem (https://github.com/ambethia/recaptcha) 上的文档对此进行了更详细的讨论。