用户#create有效,但没有渲染

时间:2015-02-27 18:18:36

标签: html ruby-on-rails-4

我已经太过努力了,所以我决定问。

执行创建操作后,我会从rails console获得创建用户的响应,但渲染不起作用。如果我刷新页面,则用户已登录并创建,但在执行操作时,没有任何反应。这是天气我通过#New动作的html或js响应来做到这一点。

同时当我点击submit时,我可以看到Chrome developer tools =>中呈现的回复network => preview,但不在浏览器内。它只是有点卡住了。 请帮忙。有什么想法可能会发生这种情况吗?

这是我的控制器。

#User Sign-up 
def new
    @user = User.new
    @title =    "Inschrijven"
    @description = "Inschrijven als talent bij.."
    respond_to do |format|
        format.js
        format.html
    end
end

# Creates the basic user object from which can be created either a Jobseeker object or a Company object.
def create
  user = User.new(user_params)
  @title = "Inschrijven"
  @description = "Create a new user for 'region'."
  respond_to do |format|
    if user.save
        sign_in user
        format.html { redirect_to contact_path }
    else
      format.html { render 'new' }
    end
  end
end

以下是注册表单:

<div class="container-fluid">
<h2 class="alt1 center"><%= description %></h2>
<div class="row">

    <%= form_for(user, :url => { path: signup_path, via: 'post', action: 'create' }, :html => { remote: true, :class => "form-horizontal" }) do |f| %>
        <%= render "shared/error_messages" %>
        <div class="form-group">
          <%= f.label :email, :class => "col-sm-4 control-label" %>
          <div class="col-sm-4">
            <%= f.text_field :email, :class => "form-control" %>
          </div>
        <span id="userEmailCheck"></span>
        </div>
        <div class="form-group">
          <%= f.label :password, "Wachtwoord", :class => "col-sm-4 control-label" %>
          <div class="col-sm-4">
            <%= f.password_field :input_password, :class => "form-control" %>
        </div>
          <span><%= link_to((image_tag "tooltipicon.png"), "", :data => { toggle: "tooltip", placement: "right" }, :title => "Uw wachtwoord kan bestaan uit minimaal 6 en maximaal 20 tekens.") %></span>
      </div>

        <div class="form-group">
          <%= f.label :password_confirmation, "Herhaal wachtwoord", :class => "col-sm-4 control-label" %>
          <div class="col-sm-4">
            <%= f.password_field :password_confirmation, :class => "form-control" %>
          </div>
        </div>

        <div class="form-group">
          <div class="col-sm-offset-5 col-sm-4">
            <%= f.submit "Ga verder", class: "btn" %>
          </div>
        </div>
    </div>
<% end %>

1 个答案:

答案 0 :(得分:0)

您在表单定义中使用remote: true。这意味着请愿书将使用Rails内置unobtrusive javascript features作为javascript处理。您可以在服务器日志中检查请愿书是否有内容类型 JS 而不是 HTML

你的控制器应该相应地处理这种情况。现在,您明确声明HTML请求的行为,而不是为JS定义任何行为。这肯定会在服务器上出现异常(您可以在Chrome开发工具的 network 标签中看到)。

将您的控制器操作更改为:

def create
  user = User.new(user_params)
  @title = "Inschrijven"
  @description = "Create a new user for 'region'."
  respond_to do |format|
    if user.save
        sign_in user
        format.html { redirect_to contact_path }
        format.js {}
    else
      format.html { render 'new' }
      format.js {}
    end
  end
end

然后在create.js.erb上创建一个app/views/users/文件(假设您的控制器名称为UsersController。该文件应该在 Javascript 中处理,添加模型后的当前视图。


当然,如果您只需要重定向到remote: true的HTML请求,则可以选择从表单中删除contact_path选项。