好的,之前我遇到了用户#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在这里。
答案 0 :(得分:5)
根据您的代码,如果User
不存在,则不会输入if块。 Rails最终会尝试查找create.html
,因为当前操作为create
。
要避免这种情况,您必须将其重定向到某个位置,或者渲染您在下一个if
和else
中完成的模板,但它不会执行。
条件不是让它重定向到任何地方。尝试像这样移动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