Mongoid создает внедренный документ из представления

#ruby-on-rails #mongodb #mongoid

#ruby-on-rails #mongodb #mongoid

Вопрос:

Я пытаюсь добавить профиль для встраивания в пользователя, и я продолжаю получать эту ошибку.

    Access to the collection for Profile is not allowed since it is an embedded document, please access a collection from the root document.
  

Я уверен, что это простая проблема для исправления, но я понятия не имею, как это сделать. Я совсем новичок в RoR, поэтому все еще немного запутанно. Вот мой код.

Модели / Профиль

 class Profile
  include Mongoid::Document
  attr_accessible :handle, :description

  field :handle
  field :description
  embedded_in :user
end
  

Контроллеры / Профиль

 class ProfileController < ApplicationController
  def create
    @user = current_user
    @profile = @user.profile.create!(params[:profile])
    redirect_to dashboard_path
  end
end
  

Просмотры / профиль /новый

 <h1>Create Profile</h1>

<%= form_for [:current_user, Profile.create] do |f| %>
<div class="field">
    <%= f.label :handle %>
    <%= f.text_field :handle %>
</div>
<div class="field">
    <%= f.label :description %>
    <%= f.text_area:description %>
</div>

  <p class="button"><%= f.submit %></p>
<% end %>
  

Ответ №1:

Вы не можете использовать Profile.create в своем, views.html.erb потому что Profile он встроен в пользователя. Итак, вам нужно сделать что-то вроде current_user.build_profile

 <%= form_for [:current_user, current_user.build_profile] do |f| %>
  

должно сработать

Ответ №2:

попробуйте

 @user = current_user
@profile = Profile.new(params[:profile])
@user.profile = @profile
@user.save
# or @profile.save
  

Комментарии:

1. Да. Вы хотите, чтобы я опубликовал его?

2. Да, пожалуйста, добавьте пользовательскую модель в сообщение

3. О, и версия MongoID. Это может быть ошибка в старой версии.

4. Вот ссылка на код. Также я использую MongoID 2.0.1. Я уверен, что это просто то, что я делаю неправильно.