我编写了我的第一个rails项目,大约一半时间意识到我需要在管理屏幕上创建某些用户时使用名字和姓氏作为输入。这样做的原因是这些用户可以将其密码自动设置为其姓氏,然后在首次登录时使用密码重置选项。但是,我的“用户”表只包含名称:字符串,我不想将其更改为名字和姓氏列(这在开头是明智的,但现在我已经建立了用户的其他形式,重构真的很烦人)。我一直在用不同的方法来组合form_for中的字段,但到目前为止还没有工作(我的代码中有一些存在)。想法?
为了澄清,我不是在寻找任何改变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>
控制台输出(名称未出现在&#34;用户&#34;参数列表中):
Parameters: {"utf8"=>"✓", "authenticity_token"=>"THo/nkIFuQhD16ql+QKwnLoYRbSiKR371ptcRXx5XKJtt761m6To+7nUWes2+LLJsyicTXMUozlO+npiLg2HUg==", "first"=>"Blah", "last"=>"Blah", "user"=>{"email"=>"blah1@example.com", "access_level"=>"Chair", "phone_number"=>"(914) 980-3233"}, "commit"=>"Create my account"}
谢谢!
答案 0 :(得分:2)
就像使用
一样简单params[:user][:name] = "#{params[:first]} #{params[:last]}"
当你只是添加一个键时,不需要真正合并,然后我使用字符串插值使字符串连接更容易阅读。