2016-05-12 66 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 %>