2015-07-13 90 views
0

我正在编写我的第一个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>&nbsp;</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"} 

谢谢!

+0

根据经验,我可以告诉你,从长远来看最终可能会是一个糟糕的主意,而不会有单独的'first_name'和'last_name'字段。主要是因为不可逆转:如果您需要它,几乎不可能从'full_name'中检索名字/姓氏(有些人具有带空格的复合名称......)。现在我明白,从'name'到'first_name'和'last_name'的迁移可能会很复杂,但它可以为您节省一些麻烦,在将来... –

+0

谢谢@CyrilDD是的,我可能最终会这样做 –

回答

2

这与使用

params[:user][:name] = "#{params[:first]} #{params[:last]}" 

没有必要当你只是增加一个关键,还真合并一样简单,然后我用串插,使字符串连接一个小更易于阅读。

+0

我会在哪里把这行代码?我上面更新的代码仍然会产生错误的输出(我已添加) –

+0

例如,您可以将此行放在'user_params'函数的开头。但不要忘记添加零检查,否则此行可能会崩溃你的应用程序! –