找不到UsersController #create的模板,渲染头:no_content

时间:2018-03-27 02:53:51

标签: ruby-on-rails ruby

好的,之前我遇到了用户#create没有模板错误的问题,现在它完成了200 OK但是根本没有重定向。以下是我编辑过的users_controller.rb

我有一个注册,登录,注销rails应用程序,用户作为资源。我正在尝试将第一个用户保存在数据库中,这样我就可以登录了,但是当我尝试#34;用户#new"时,这个错误就是服务器输出。和#34;用户#create"完整的错误如下,那么我的users_controller.rb和views / users - > new.html.erb

No template found for UsersController#create, rendering head :no_content
Completed 204 No Content in 35ms (ActiveRecord: 0.5ms)

users_controller.rb

def new
  @user = User.new
end

def create
  @user = User.new(user_params)
  if (@user = User.find_by_email(params[:email]))
    flash[:success] = "User already exists."
    if @user.save
      session[:user_id] = user.id
      flash[:success] = "New User created."
      redirect_to '/layouts/application'
    else
      render 'new'
    end
  end
end

new.html.erb

<h1>Sign Up</h1>
<%= form_with(model: @user) do |f| %>
<p> Username:</br> <%= f.text_field :username %> </p>
<p> Email:</br> <%= f.text_field :email %> </p>
<p> Password:</br> <%= f.password_field :password%></p>

<%= f.submit "Signup" %>
<% end %>
<% if @user.errors.any? %>
<ul class="Signup_Errors">
<% for message_error in @user.errors.full_messages %>
  <li>* <%= message_error %></li>
<% end %>
</ul>
<% end %>
</div>

我是否还有另一个html.erb文件?我该怎么知道那是什么?抱歉显而易见的问题,newb在这里。

1 个答案:

答案 0 :(得分:5)

根据您的代码,如果User不存在,则不会输入if块。 Rails最终会尝试查找create.html,因为当前操作为create

要避免这种情况,您必须将其重定向到某个位置,或者渲染您在下一个ifelse中完成的模板,但它不会执行。

条件不是让它重定向到任何地方。尝试像这样移动if块。

def create
  @user = User.new(user_params)
  if User.exists?(email: params[:email]) # I think this should be `user_params[:email]` instead of `params[:email]`
    flash[:error] = "User already exists." 
    redirect_to 'whereever/you/want/to/redirect' and return
  end
  if @user.save
    session[:user_id] = user.id
    flash[:success] = "New User created."
    redirect_to '/layouts/application'
  else
    render 'new'
  end
end