2016-05-12 83 views
0

我是mongodb的新手,並試圖學習Rails。我正在使用mongoid寶石。 所以我的應用程序有一個用戶資源應該有一個名稱,電子郵件,地址和訂閱。 姓名,電子郵件和地址字段可以使用用戶想要鍵入的任何值。但訂閱是從可用訂閱的主列表中選擇的。我必須爲可用的訂閱呈現collection_check_boxes,並且用戶選擇他想要的內容並提交表單。 我設計的這種方式,如何渲染此場景的collection_check_box

用戶模型

  • 名稱:字符串

  • 電子郵件:字符串

  • 地址:字符串
  • 訂閱:數組

訂閱模式

  • 名稱:字符串

有不同的認購提供了用戶的形式可用的預訂這兩款車型之間沒有任何關係。 一旦用戶選擇並提交表單,訂閱ID將作爲數組存儲在用戶模型中。 這一切都工作正常提交,但當用戶點擊編輯更改訂閱我不知道或我未能呈現collection_check_boxes與他原來的訂閱被檢查。 模型創建過程中是否存在設計缺陷?我不能用我的頭來包裹embeds_many,embedded_in之類的關係來處理上面的場景。

對於下面的代碼,當用戶嘗試編輯,我得到這個錯誤在編輯表單

undefined method `id' for "5733af2e54c870ee8190950b":String 

<div class="checkbox"> 
 
    <% if @user.new_record? %> 
 
     <%= f.collection_check_boxes(:subscriptions, Subscription.all, :id, :name) do |b| %> 
 
     <%= b.label class:"label-checkbox" do %> 
 
      <%= b.check_box + b.text %> 
 
      | 
 
     <%end%> 
 
     <% end %> 
 
    <% else %> 
 
     <%= f.collection_check_boxes(:subscriptions, Subscription.all, :id, :name, { checked: @user.subscriptions.map(&:id) }) do |b| %> 
 
     <%= b.label class:"label-checkbox" do %> 
 
      <%= b.check_box + b.text %> 
 
      | 
 
     <%end%> 
 
     <% end %> 
 
    <% end %> 
 
</div>

回答

0

我想通了,我自己,所以收集複選框helper方法是調用id方法返回的訂閱。但是我將訂閱ID存儲爲用戶模型中的字符串數組,因此無法對字符串值調用id方法。所以我在控制器中編寫了一個helper方法來從Subscription模型中返回實際的訂閱對象。現在,所有的工作

def get_subscriptions(user) 
    Subscription.find(user.subscriptions) 
    end 
    helper_method :get_subscriptions 

<% if @user.new_record? %> 
 
     <%= f.collection_check_boxes(:subscriptions, Subscription.all, :id, :name) do |b| %> 
 
     <%= b.label class:"label-checkbox" do %> 
 
      <%= b.check_box + b.text %> 
 
      | 
 
     <%end%> 
 
     <% end %> 
 
    <% else %> 
 
     <%= f.collection_check_boxes(:subscriptions, Subscription.all, :id, :name, { checked: get_subscriptions(@user).map(&:id) }) do |b| %> 
 
     <%= b.label class:"label-checkbox" do %> 
 
      <%= b.check_box + b.text %> 
 
      | 
 
     <%end%> 
 
     <% end %> 
 
    <% end %>