我正在编写我的第一个rails项目,并且大约一半的时候意识到我需要在管理屏幕创建特定用户时输入名和姓作为输入。原因是这些用户可以将其密码自动设置为他们的姓氏,然后在首次登录时拥有密码重置选项。但是,我的用户表只包含名称:字符串,我不想将其更改为名字和姓氏列(这是开始时很聪明的事情,但现在我已经为用户构建了其他表单,这对重构来说真的很烦人)。我一直在用不同的方式来组合form_for中的字段,但目前为止还没有工作(有些存在于我的代码中)。想法?在视图中结合名和姓RoR
为了澄清,我没有找到任何更改user.rb文件以要求用户具有名字或姓氏的任何内容。
admins_controller:
def newchair
params[:user][:name] = "#{params[:first]} #{params[:last]}"
params[:user][:password] = "#{params[:last]}"
params[:user][:password_confirmation] = "#{params[:last]}"
@user = User.new(user_params)
if @user.save
redirect_to '/admin/chair'
else
redirect_to '/admin/chair'
end
end
...
private
def user_params
params.require(:user).permit(:name, :email, :password,
:password_confirmation, :access_level,
:phone_number)
end
chairs.html.erb
<div class="row">
<div class="col-md-6 col-md-offset-3">
<%= form_for(@user) do |f| %>
<%= f.label :first_name %>
<input type="text" name="first" id="first" />
<%= f.label :last_name %>
<input type="text" name="last" id="last" />
<%= f.label :email %>
<%= f.email_field :email, class: 'form-control' %>
<%= f.hidden_field :access_level, :value => "Chair" %>
<%= f.label :Phone %>
<%= f.telephone_field :phone_number, class: 'form-control' %>
<p> </p>
<div class="col-md-12">
<%= f.submit "Create my account", class: "btn btn-primary" %>
</div>
<% end %>
</div>
</div>
控制台输出(名字没有出现在 “用户” PARAMS列表):
Parameters: {"utf8"=>"✓", "authenticity_token"=>"THo/nkIFuQhD16ql+QKwnLoYRbSiKR371ptcRXx5XKJtt761m6To+7nUWes2+LLJsyicTXMUozlO+npiLg2HUg==", "first"=>"Blah", "last"=>"Blah", "user"=>{"email"=>"[email protected]", "access_level"=>"Chair", "phone_number"=>"(914) 980-3233"}, "commit"=>"Create my account"}
谢谢!
根据经验,我可以告诉你,从长远来看最终可能会是一个糟糕的主意,而不会有单独的'first_name'和'last_name'字段。主要是因为不可逆转:如果您需要它,几乎不可能从'full_name'中检索名字/姓氏(有些人具有带空格的复合名称......)。现在我明白,从'name'到'first_name'和'last_name'的迁移可能会很复杂,但它可以为您节省一些麻烦,在将来... –
谢谢@CyrilDD是的,我可能最终会这样做 –