我正在使用rails应用程序创建新用户。我已经将表单设置好了,现在查看控制器中的方法。这就是我对新手和创建动作的看法 -
def new
@user = User.new
end
def create
@user = User.new(user_params)
if @user.save
redirect_to @user, notice: "Welcome to Safeguarding Monitor."
else
render 'new'
end
end
这些是用户参数 -
def user_params
params.require(:user).permit(:firstname, :surname, :nickname, :email, :timezone )
end
当我填写表单时,它只是重定向到新的。它没有保存用户,我似乎无法理解为什么。我已经离开轨道了一段时间,并不能完全解决为什么会发生这种情况。
这是表格 -
<% provide :title, "Add Staff Member" %>
<%= form_for @user do |f| %>
<div class="form-group row">
<%= f.label :firstname, 'First Name', class: 'col-sm-2' %>
<div class="col-sm-10">
<%= f.text_field :firstname, class: 'form-control' %>
</div>
</div>
<div class="form-group row">
<%= f.label :nickname, 'Nickname', class: 'col-sm-2' %>
<div class="col-sm-10">
<%= f.text_field :nickname, class: 'form-control' %>
</div>
</div>
<div class="form-group row">
<%= f.label :surname, 'Last Name', class: 'col-sm-2' %>
<div class="col-sm-10">
<%= f.text_field :surname, class: 'form-control' %>
</div>
</div>
<div class="form-group row">
<%= f.label :email, 'Email Address', class: 'col-sm-2' %>
<div class="col-sm-10">
<%= f.email_field :email, class: 'form-control' %>
</div>
</div>
<div class="form-group row">
<%= f.label :email, 'Send Welcome Email?', class: 'col-sm-2' %>
<div class="col-sm-10">
<%= check_box_tag :send_welcome_email %>
</div>
</div>
<div class="form-group row">
<%= f.label :current_school_id, 'School Group', class: 'col-sm-2' %>
<div class="col-sm-10">
<%= f.text_field :current_school_id, class: 'form-control' %>
</div>
</div>
<div class="form-group row">
<%= f.label :timezone, 'Timezone', class: 'col-sm-2' %>
<div class="col-sm-10">
<%= f.time_zone_select(:timezone, nil, {default: @user.timezone}, {class: 'form-control custom-select'}) %>
</div>
</div>
<hr>
<h2>Create Password</h2>
<p><small>Password must be at least six characters long</small></p>
<div class="form-group row">
<%= f.label :password, 'New Password', class: 'col-sm-2' %>
<div class="col-sm-10">
<%= f.password_field :password, autocomplete: "off", class: 'form-control' %>
</div>
</div>
<div class="form-group row">
<%= f.label :password_confirmation, 'Confirm Password', class: 'col-sm-2' %>
<div class="col-sm-10">
<%= f.password_field :password_confirmation, autocomplete: "off", class: 'form-control' %>
</div>
</div>
<div class="actions">
<%= f.submit 'Submit', class: 'btn btn-primary' %>
</div>
<% end %>
更新 -
我进入了展示页面并得到了一个错误,我似乎已经解决了这个问题 -
def show
@user = User.find(params[:id])
end
然而,虽然这种方法似乎解决了网站上的问题。用户配置文件未保存在数据库中,当我检查rails控制台时,最后一个用户不是我创建的用户。我应该使用不同的方法吗?
答案 0 :(得分:0)
您的password
password_confirmation
和user_params
将是
params.require(:user).permit(:firstname, :surname, :nickname, :email, :timezone, :password, :password_confirmation)
像这样更新create
方法
def create
@user = User.new(user_params)
respond_to do |format|
if @user.save
flash[:notice] = 'User was successfully created.'
format.html { redirect_to user_path(@user) }
else
flash[:notice] = 'Something went wrong.'
format.html { render :action => "new" }
# or
# format.html { redirect_to new_user_path }
end
end
end
应该有效
答案 1 :(得分:0)
在save
之后,您必须检查是否有任何错误。
def create
@user = User.new(user_params)
@user.save
unless @user.errors.any?
#puts @user.errors.full_messages
redirect_to @user, notice: "Welcome to Safeguarding Monitor."
else
render 'new'
end
end
检查您允许的参数是否为fool-dev建议。
答案 2 :(得分:0)
可能会出现一些验证错误,因为哪些记录未保存,新页面将再次呈现。
添加代码以在视图上显示验证错误消息,这样您就会知道自己在做什么错误。