2012-08-24 52 views
0

我是MongoDB的新手,不確定如何使用Array-Field-Type。RoR MongoDB Arrayfield用法

所以我在我的模型

field :admins, type: Array 

在這個領域我想存儲爲模型的「管理員」的所有user_ids創建。但是當我嘗試設置這個字段時,它不會保存數組中的信息,它只是簡單地創建一個帶有ID的字符串。而且由於我的約束,只有管理員可以修改我的過濾功能

def check_if_admin 
    unless Agency.find(params[:id]).admins.include?(current_agent.id) 
    flash[:notice] = "Only possible as Admin." 
    redirect_to root_path 
    end 
end 

獲取

"can't convert Moped::BSON::ObjectId into String" 

於是,我就開始我場在創建DEF與ID陣列中的錯誤:

@agency.admins = [current_agent.id] 

這樣做陣列中的一個用戶的技巧,但我該如何添加ID到這個領域?

當我進入我的編輯形式:

<%= form_for(@agency) do |f| %> 
    <div class="field"> 
    <%= f.label :name %><br /> 
    <%= f.text_field :name %> 
    </div> 
    <div class="field"> 
    <%= f.label :admins %><br /> 
    <%= f.text_field :admins %> <br /> 
    </div>   
    <div class="field"> 
    <%= f.label :agents %><br /> 
    <%= f.text_field :agents %> 
    </div> 
    <div class="actions"> 
    <%= f.submit %> 
    </div> 
<% end %> 

和類型在手工另一USER_ID,我回到我的錯誤一次。 任何人都知道如何解決這個問題?

非常感謝您的幫助!

回答

0

此消息表示在某個點存儲了應該有ObjectId的字符串。 Ruby試圖將current_agent.id(一個ObjectId)與params [:id](一個字符串)進行比較。

看起來你沒有將輸入從表單中的text_field轉換爲ObjectID,然後再將它壓入數組。

從管理員現場以輸入,使的ObjectId是這樣的:

BSON::ObjectId.new(string_representing_admin_id) 

我猜管理員字段是一個逗號分隔的管理員_ids的陣列,並且您正在使用的是容易一些_id值與使用用戶名而不是生成的ObjectId一起工作,因爲這將非常繁瑣。

在這種情況下,您可能會拆分並剝離輸入,然後使用map/select創建一個ObjectId數組。

這將是更容易使用一個選擇字段顯示用戶名這樣的東西在rails中的權利?

無論如何,如果您需要更多幫助,請展示集合中的一些示例文檔。

+0

非常感謝!它對我有幫助。不知道我可以打電話給這樣的ID! – Jan