Rails mongoid三模型关系

时间:2012-03-12 09:30:15

标签: ruby-on-rails ruby-on-rails-3.1 mongoid relationship

enter image description here

我上面描述的关系是蓝色的,然而,它会提示很多错误,例如没有方法错误。

A和C之间的EMBEDDED关系(红色)是否可以?鉴于另外两种关系。

此外,在路径文件中,我应该将B嵌套在A?

请告知并谢谢。

class Trip
  include Mongoid::Document
  include Mongoid::Timestamps

  field :name
  key :name

  belongs_to :user
  has_many :logs
end

class Log
  include Mongoid::Document
  field :content
  validates_presence_of :content
  belongs_to :trip
  belongs_to :user
end

class User
  include Mongoid::Document
  has_many :trips
  has_many :logs
end

错误:

NoMethodError in Trips#show

Showing /home/jason/apps/app/views/trips/show.html.haml where line #17 raised:

undefined method `logs_path' for #<#<Class:0x9b8a14c>:0x9d3251c>

控制器:

class TripsController < ApplicationController
   def show
    @trip = Trip.find(params[:id])
    @log = Log.new
    @logmsg = @trip.logs
  end
end

class LogsController < ApplicationController

  def create
    @log = @trip.logs.build(params[:log])
    current_user.logs.build(params[:log])

    respond_to do |format|
      if @log.save
        format.html { redirect_to @log, notice: 'successfully created.' }
      else
        format.html { redirect_to trip_path(@trip) }
      end
    end
  end

  def destroy
    I want an ajax destroy here, as the logs will only be shown in the Trips show page.
  end
end

show - trips / show.html.haml:

= form_for @log do |f|
  .field
    = f.label :content
    = f.text_field :content
  .actions
    = f.submit 'Save'

以下是路线文件摘录:

App::Application.routes.draw do
  resources :trips do
    resources :logs
  end
end

1 个答案:

答案 0 :(得分:2)

不,您无法在ModalA中嵌入ModalC,因为ModelB将无法引用嵌入的对象。

嵌入式模型实际上是里面的父文档,而不是单独的集合。