Ruby on rails 在视图RoR中合并名字和姓氏
我正在编写我的第一个rails项目,大约在编写过程中,我意识到在从管理屏幕创建某些用户时,我需要输入名字和姓氏。这样做的原因是,这些用户可以自动将密码设置为姓氏,然后在首次登录时具有密码重置选项。然而,我的Users表只包含name:string,我不想将其更改为first和last name列(这在一开始是很明智的,但现在我已经为用户构建了其他表单,重构会非常烦人)。我一直在用不同的方法来组合表单_中的字段,但到目前为止还没有一种有效的方法(有些方法出现在我的代码中)。想法 为了澄清这一点,我并不是在寻找任何改变user.rb文件以要求用户有名字或姓氏的东西 管理员/控制器:Ruby on rails 在视图RoR中合并名字和姓氏,ruby-on-rails,ruby,Ruby On Rails,Ruby,我正在编写我的第一个rails项目,大约在编写过程中,我意识到在从管理屏幕创建某些用户时,我需要输入名字和姓氏。这样做的原因是,这些用户可以自动将密码设置为姓氏,然后在首次登录时具有密码重置选项。然而,我的Users表只包含name:string,我不想将其更改为first和last name列(这在一开始是很明智的,但现在我已经为用户构建了其他表单,重构会非常烦人)。我一直在用不同的方法来组合表单_中的字段,但到目前为止还没有一种有效的方法(有些方法出现在我的代码中)。想法 为了澄清这一点,我
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[:user][:name] = "#{params[:first]} #{params[:last]}"
当您只添加一个键时,不需要真正合并,然后我使用字符串插值使字符串串联更易于阅读。这行代码应该放在哪里?我上面更新的代码仍然会产生错误的输出(我已经添加了),例如,您可以将此行放在
user\u params
函数的开头。但别忘了添加零检查,否则这一行可能会使你的应用程序崩溃!根据经验,我可以告诉你,从长远来看,没有独立的名字
和姓氏
字段可能是个糟糕的主意。主要是因为不可逆性:如果需要的话,几乎不可能从全名中检索名字/姓氏(有些人有带空格的复合名…)。现在我明白了从name
迁移到first\u name
和last\u name
可能会很复杂,但这可以在将来为您节省一些麻烦……谢谢@cyridd是的,我可能会这样做
params[:user][:name] = "#{params[:first]} #{params[:last]}"