我是mongodb的新手,并尝试使用Rails学习。我正在使用mongoid gem。 所以我的应用程序有一个用户资源,应该有一个名称,电子邮件,地址和订阅。 名称,电子邮件和地址字段可以采用用户希望键入的任何值。但是,订阅是从可用订阅的主列表中选择的。我必须为可用的订阅呈现collection_check_boxes,并且用户选择他想要的内容并提交表单。 我是这样设计的,
用户模型
名称:字符串
电子邮件:字符串
订阅模式
除了Subscription提供用户表单中的可用订阅之外,这两个模型之间没有关系。 用户选择并提交表单后,订阅ID将作为数组存储在User模型中。 这一切都可以正常提交,但是当用户点击编辑以更改订阅我不知道或者我无法渲染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>
&#13;
答案 0 :(得分:0)
我想通了自己,所以收集复选框helper方法在返回的订阅上调用id
方法。但是我将订阅ID存储为User模型中的字符串数组,它无法在字符串值上调用id
方法。所以我在控制器中编写了一个辅助方法,以从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 %>
&#13;