2015-10-15 41 views
0

這是我的問題。 我有一個表與兩列id和名稱的角色。 列id通過外鍵鏈接到users表中的列role_id。列id和role_id的類型是整數。 在表中的角色我有這4個記錄:如何顯示字符串數組,但選擇數組中字符串索引的形式

id name 
-- ---- 
1 owner 
2 doctor 
3 receptionist 
4 customer 

對於用戶我有一個表格編輯像admin和ROLE_ID的特權。 我想要顯示類似角色名稱的值,但是當我單擊提交按鈕時,我希望使用id或role_id整數值來更新客戶。

的user_controller.rb文件:

def show 
    @user = User.includes(:role).find(params[:id]) 
    #@role = @user.role 
    end 

    def edit 
    @user = User.includes(:role).find(params[:id]) 
    end 

    def update 
    @user = User.includes(:role).find(params[:id]) 
    if @user.update_attributes(user_params) 
     flash[:success] = "User Priviladges Updated" 
     #log_in @user 
     redirect_to @user 
    else 
     render 'edit' 
    end 
    end 

    private 

    def user_params 
     params.require(:user).permit(:name, :email, :role_id, 
     :password, :password_confirmation, :admin) 
    end 

的edit.html.erb文件:

<h1>Edit User Privileges</h1> 
<strong><%= "Name: " %></strong><%[email protected]%> 
<br> 
<strong><%= "Email: " %></strong><%[email protected]%> 
<br> 
<strong><%= "Role: " %></strong><%[email protected]%> 
<br> 
<strong><%= "Role ID: " %></strong><%[email protected]_id%> 

<%= form_for(@user) do |f| %> 
    <div class="field"> 
    <%= f.check_box :admin %> 
    <%= f.label :admin %> 
    </div> 

    <div class="field"> 
    <%= f.label :role_id %> 
    <%=f.select :role_id, options_for_select([1,2,3,4], f.object.role_id), :include_blank => false %> 
    </div> 

    <div class="actions"> 
    <%= f.button 'Submit', class: "btn btn-sm btn-info" %> 
    </div> 
    <br> 
    <strong><%= link_to 'Back', :back %></strong> 
<% end %> 

代碼工作和ROLE_ID值被正確地更新。然而,我怎樣才能在下拉選擇列表中顯示字符串而不是數字?

回答

0

我找到的解決方案是:

<%= f.select :role_id, options_from_collection_for_select(Role.order("id"), :id, :name, @user.try(:role_id)) %>