Mongodb 使用Mongoid访问Rails 3上的子文档

Mongodb 使用Mongoid访问Rails 3上的子文档,mongodb,ruby-on-rails-3.2,mongoid,Mongodb,Ruby On Rails 3.2,Mongoid,您将发现Ryan的名为Mongoid(修订版)的railscast 我根据railscast创建了一个应用程序,并将其安装在 在本例中,产品集合嵌入了评论 我可以在rails控制台中添加评论,并希望在浏览器上显示我不知道的内容 我觉得我必须调整一下 app/controllers/reviews_controller.rb 及 该应用程序由Rails 3和ruby 1.9.3p429创建 编辑: 我有两个模型。 product.rb class Product include Mongo

您将发现Ryan的名为Mongoid(修订版)的railscast

我根据railscast创建了一个应用程序,并将其安装在

在本例中,产品集合嵌入了评论

我可以在rails控制台中添加评论,并希望在浏览器上显示我不知道的内容

我觉得我必须调整一下

app/controllers/reviews_controller.rb

该应用程序由Rails 3和ruby 1.9.3p429创建


编辑:

我有两个模型。 product.rb

class Product
  include Mongoid::Document
  include Mongoid::Timestamps

  field :name, type: String
  field :price, type: BigDecimal
  field :released_on, type: Date

  attr_accessible :name, :price, :released_on

  validates_presence_of :name

  embeds_many :reviews
  accepts_nested_attributes_for :reviews
end
和review.rb

class Review
  include Mongoid::Document
  field :content, type: String

  embedded_in :product
end
我在产品集合中有一个文档:

{
    "_id" : ObjectId("51b1eac0311b6dd93a000001"),
    "created_at" : ISODate("2013-06-07T14:14:24.714Z"),
    "name" : "Apple",
    "price" : "34.45",
    "released_on" : ISODate("2013-06-06T00:00:00Z"),
    "reviews" : [
        {
            "_id" : ObjectId("51b1ec2b311b6db065000001"),
            "content" : "greate game!"
        },
        {
            "_id" : ObjectId("51b1ec56311b6db065000002"),
            "content" : "cool game!"
        }
    ],
    "updated_at" : ISODate("2013-06-07T14:14:24.714Z")
}
我想在单独的页面上访问产品的评论,因此我在app/views/products/show.html.erb上添加了一个链接:

<p id="notice"><%= notice %></p>

<p>
  <b>Name:</b>
  <%= @product.name %>
</p>

<p>
  <b>Price:</b>
  <%= @product.price %>
</p>

<p>
  <b>Released on:</b>
  <%= @product.released_on %>
</p>

<table border = 1>
  <tr>
    <th>Reviews</th>
  </tr>

<% @product.reviews.each do |review| %>
  <tr>
    <td><%= review.content %></td>
  </tr>
<% end %>
</table>

<%=  link_to "Reviews", product_reviews_path(@product) %>

<br />

<%= link_to 'Edit', edit_product_path(@product) %> |
<%= link_to 'Back', products_path %>
product_reviews GET    /products/:product_id/reviews(.:format)          reviews#index
                    POST   /products/:product_id/reviews(.:format)          reviews#create
 new_product_review GET    /products/:product_id/reviews/new(.:format)      reviews#new
edit_product_review GET    /products/:product_id/reviews/:id/edit(.:format) reviews#edit
     product_review GET    /products/:product_id/reviews/:id(.:format)      reviews#show
                    PUT    /products/:product_id/reviews/:id(.:format)      reviews#update
                    DELETE /products/:product_id/reviews/:id(.:format)      reviews#destroy
           products GET    /products(.:format)                              products#index
                    POST   /products(.:format)                              products#create
        new_product GET    /products/new(.:format)                          products#new
       edit_product GET    /products/:id/edit(.:format)                     products#edit
            product GET    /products/:id(.:format)                          products#show
                    PUT    /products/:id(.:format)                          products#update
                    DELETE /products/:id(.:format)                          products#destroy
 <%=  link_to "Reviews", product_reviews_path(@product) %>
<h1>Reviews</h1>

<% @product = Product.find(params[:product_id]) %>

<table>
  <tr>
    <th>Content</th>
  </tr>

<% @product.reviews.each do |review| %>
  <tr>
    <td><%= review.content %></td>
  </tr>
<% end %>
</table>
class ReviewsController < ApplicationController

    def index
    @product = Product.find(params[:product_id])
        @reviews = @product.reviews
    end

end
<h1>Reviews</h1>

<% @product = Product.find(params[:product_id]) %>

<table>
  <tr>
    <th>Content</th>
  </tr>

<% @reviews.each do |review| %>
  <tr>
    <td><%= review.content %></td>
  </tr>
<% end %>
</table>

<br />
当我点击app/views/products/show.html.erb中的链接时,我假设:

<p id="notice"><%= notice %></p>

<p>
  <b>Name:</b>
  <%= @product.name %>
</p>

<p>
  <b>Price:</b>
  <%= @product.price %>
</p>

<p>
  <b>Released on:</b>
  <%= @product.released_on %>
</p>

<table border = 1>
  <tr>
    <th>Reviews</th>
  </tr>

<% @product.reviews.each do |review| %>
  <tr>
    <td><%= review.content %></td>
  </tr>
<% end %>
</table>

<%=  link_to "Reviews", product_reviews_path(@product) %>

<br />

<%= link_to 'Edit', edit_product_path(@product) %> |
<%= link_to 'Back', products_path %>
product_reviews GET    /products/:product_id/reviews(.:format)          reviews#index
                    POST   /products/:product_id/reviews(.:format)          reviews#create
 new_product_review GET    /products/:product_id/reviews/new(.:format)      reviews#new
edit_product_review GET    /products/:product_id/reviews/:id/edit(.:format) reviews#edit
     product_review GET    /products/:product_id/reviews/:id(.:format)      reviews#show
                    PUT    /products/:product_id/reviews/:id(.:format)      reviews#update
                    DELETE /products/:product_id/reviews/:id(.:format)      reviews#destroy
           products GET    /products(.:format)                              products#index
                    POST   /products(.:format)                              products#create
        new_product GET    /products/new(.:format)                          products#new
       edit_product GET    /products/:id/edit(.:format)                     products#edit
            product GET    /products/:id(.:format)                          products#show
                    PUT    /products/:id(.:format)                          products#update
                    DELETE /products/:id(.:format)                          products#destroy
 <%=  link_to "Reviews", product_reviews_path(@product) %>
<h1>Reviews</h1>

<% @product = Product.find(params[:product_id]) %>

<table>
  <tr>
    <th>Content</th>
  </tr>

<% @product.reviews.each do |review| %>
  <tr>
    <td><%= review.content %></td>
  </tr>
<% end %>
</table>
class ReviewsController < ApplicationController

    def index
    @product = Product.find(params[:product_id])
        @reviews = @product.reviews
    end

end
<h1>Reviews</h1>

<% @product = Product.find(params[:product_id]) %>

<table>
  <tr>
    <th>Content</th>
  </tr>

<% @reviews.each do |review| %>
  <tr>
    <td><%= review.content %></td>
  </tr>
<% end %>
</table>

<br />
Myapp/controllers/reviews\u controller.rb如下所示:

class ReviewsController < ApplicationController

    def index
        @reviews = @products.reviews
    end

end
class-ReviewsController
我相信我犯了一个小错误

顺便说一句,我可以在app/views/products/show.html.erb上显示嵌入文档的评论,但我想在app/views/reviews/index.html.erb上显示。 Aash Dhariya帮助mongoid谷歌集团解决了这一问题

我确实更改了评论\u controller.rb

<p id="notice"><%= notice %></p>

<p>
  <b>Name:</b>
  <%= @product.name %>
</p>

<p>
  <b>Price:</b>
  <%= @product.price %>
</p>

<p>
  <b>Released on:</b>
  <%= @product.released_on %>
</p>

<table border = 1>
  <tr>
    <th>Reviews</th>
  </tr>

<% @product.reviews.each do |review| %>
  <tr>
    <td><%= review.content %></td>
  </tr>
<% end %>
</table>

<%=  link_to "Reviews", product_reviews_path(@product) %>

<br />

<%= link_to 'Edit', edit_product_path(@product) %> |
<%= link_to 'Back', products_path %>
product_reviews GET    /products/:product_id/reviews(.:format)          reviews#index
                    POST   /products/:product_id/reviews(.:format)          reviews#create
 new_product_review GET    /products/:product_id/reviews/new(.:format)      reviews#new
edit_product_review GET    /products/:product_id/reviews/:id/edit(.:format) reviews#edit
     product_review GET    /products/:product_id/reviews/:id(.:format)      reviews#show
                    PUT    /products/:product_id/reviews/:id(.:format)      reviews#update
                    DELETE /products/:product_id/reviews/:id(.:format)      reviews#destroy
           products GET    /products(.:format)                              products#index
                    POST   /products(.:format)                              products#create
        new_product GET    /products/new(.:format)                          products#new
       edit_product GET    /products/:id/edit(.:format)                     products#edit
            product GET    /products/:id(.:format)                          products#show
                    PUT    /products/:id(.:format)                          products#update
                    DELETE /products/:id(.:format)                          products#destroy
 <%=  link_to "Reviews", product_reviews_path(@product) %>
<h1>Reviews</h1>

<% @product = Product.find(params[:product_id]) %>

<table>
  <tr>
    <th>Content</th>
  </tr>

<% @product.reviews.each do |review| %>
  <tr>
    <td><%= review.content %></td>
  </tr>
<% end %>
</table>
class ReviewsController < ApplicationController

    def index
    @product = Product.find(params[:product_id])
        @reviews = @product.reviews
    end

end
<h1>Reviews</h1>

<% @product = Product.find(params[:product_id]) %>

<table>
  <tr>
    <th>Content</th>
  </tr>

<% @reviews.each do |review| %>
  <tr>
    <td><%= review.content %></td>
  </tr>
<% end %>
</table>

<br />
class-ReviewsController
app/views/reviews/index.html.erb

<p id="notice"><%= notice %></p>

<p>
  <b>Name:</b>
  <%= @product.name %>
</p>

<p>
  <b>Price:</b>
  <%= @product.price %>
</p>

<p>
  <b>Released on:</b>
  <%= @product.released_on %>
</p>

<table border = 1>
  <tr>
    <th>Reviews</th>
  </tr>

<% @product.reviews.each do |review| %>
  <tr>
    <td><%= review.content %></td>
  </tr>
<% end %>
</table>

<%=  link_to "Reviews", product_reviews_path(@product) %>

<br />

<%= link_to 'Edit', edit_product_path(@product) %> |
<%= link_to 'Back', products_path %>
product_reviews GET    /products/:product_id/reviews(.:format)          reviews#index
                    POST   /products/:product_id/reviews(.:format)          reviews#create
 new_product_review GET    /products/:product_id/reviews/new(.:format)      reviews#new
edit_product_review GET    /products/:product_id/reviews/:id/edit(.:format) reviews#edit
     product_review GET    /products/:product_id/reviews/:id(.:format)      reviews#show
                    PUT    /products/:product_id/reviews/:id(.:format)      reviews#update
                    DELETE /products/:product_id/reviews/:id(.:format)      reviews#destroy
           products GET    /products(.:format)                              products#index
                    POST   /products(.:format)                              products#create
        new_product GET    /products/new(.:format)                          products#new
       edit_product GET    /products/:id/edit(.:format)                     products#edit
            product GET    /products/:id(.:format)                          products#show
                    PUT    /products/:id(.:format)                          products#update
                    DELETE /products/:id(.:format)                          products#destroy
 <%=  link_to "Reviews", product_reviews_path(@product) %>
<h1>Reviews</h1>

<% @product = Product.find(params[:product_id]) %>

<table>
  <tr>
    <th>Content</th>
  </tr>

<% @product.reviews.each do |review| %>
  <tr>
    <td><%= review.content %></td>
  </tr>
<% end %>
</table>
class ReviewsController < ApplicationController

    def index
    @product = Product.find(params[:product_id])
        @reviews = @product.reviews
    end

end
<h1>Reviews</h1>

<% @product = Product.find(params[:product_id]) %>

<table>
  <tr>
    <th>Content</th>
  </tr>

<% @reviews.each do |review| %>
  <tr>
    <td><%= review.content %></td>
  </tr>
<% end %>
</table>

<br />
评论
内容

现在,它将在单独的页面上显示评论!:)

已解决。 Aash Dhariya帮助mongoid谷歌集团解决了这一问题

我确实更改了评论\u controller.rb

<p id="notice"><%= notice %></p>

<p>
  <b>Name:</b>
  <%= @product.name %>
</p>

<p>
  <b>Price:</b>
  <%= @product.price %>
</p>

<p>
  <b>Released on:</b>
  <%= @product.released_on %>
</p>

<table border = 1>
  <tr>
    <th>Reviews</th>
  </tr>

<% @product.reviews.each do |review| %>
  <tr>
    <td><%= review.content %></td>
  </tr>
<% end %>
</table>

<%=  link_to "Reviews", product_reviews_path(@product) %>

<br />

<%= link_to 'Edit', edit_product_path(@product) %> |
<%= link_to 'Back', products_path %>
product_reviews GET    /products/:product_id/reviews(.:format)          reviews#index
                    POST   /products/:product_id/reviews(.:format)          reviews#create
 new_product_review GET    /products/:product_id/reviews/new(.:format)      reviews#new
edit_product_review GET    /products/:product_id/reviews/:id/edit(.:format) reviews#edit
     product_review GET    /products/:product_id/reviews/:id(.:format)      reviews#show
                    PUT    /products/:product_id/reviews/:id(.:format)      reviews#update
                    DELETE /products/:product_id/reviews/:id(.:format)      reviews#destroy
           products GET    /products(.:format)                              products#index
                    POST   /products(.:format)                              products#create
        new_product GET    /products/new(.:format)                          products#new
       edit_product GET    /products/:id/edit(.:format)                     products#edit
            product GET    /products/:id(.:format)                          products#show
                    PUT    /products/:id(.:format)                          products#update
                    DELETE /products/:id(.:format)                          products#destroy
 <%=  link_to "Reviews", product_reviews_path(@product) %>
<h1>Reviews</h1>

<% @product = Product.find(params[:product_id]) %>

<table>
  <tr>
    <th>Content</th>
  </tr>

<% @product.reviews.each do |review| %>
  <tr>
    <td><%= review.content %></td>
  </tr>
<% end %>
</table>
class ReviewsController < ApplicationController

    def index
    @product = Product.find(params[:product_id])
        @reviews = @product.reviews
    end

end
<h1>Reviews</h1>

<% @product = Product.find(params[:product_id]) %>

<table>
  <tr>
    <th>Content</th>
  </tr>

<% @reviews.each do |review| %>
  <tr>
    <td><%= review.content %></td>
  </tr>
<% end %>
</table>

<br />
class-ReviewsController
app/views/reviews/index.html.erb

<p id="notice"><%= notice %></p>

<p>
  <b>Name:</b>
  <%= @product.name %>
</p>

<p>
  <b>Price:</b>
  <%= @product.price %>
</p>

<p>
  <b>Released on:</b>
  <%= @product.released_on %>
</p>

<table border = 1>
  <tr>
    <th>Reviews</th>
  </tr>

<% @product.reviews.each do |review| %>
  <tr>
    <td><%= review.content %></td>
  </tr>
<% end %>
</table>

<%=  link_to "Reviews", product_reviews_path(@product) %>

<br />

<%= link_to 'Edit', edit_product_path(@product) %> |
<%= link_to 'Back', products_path %>
product_reviews GET    /products/:product_id/reviews(.:format)          reviews#index
                    POST   /products/:product_id/reviews(.:format)          reviews#create
 new_product_review GET    /products/:product_id/reviews/new(.:format)      reviews#new
edit_product_review GET    /products/:product_id/reviews/:id/edit(.:format) reviews#edit
     product_review GET    /products/:product_id/reviews/:id(.:format)      reviews#show
                    PUT    /products/:product_id/reviews/:id(.:format)      reviews#update
                    DELETE /products/:product_id/reviews/:id(.:format)      reviews#destroy
           products GET    /products(.:format)                              products#index
                    POST   /products(.:format)                              products#create
        new_product GET    /products/new(.:format)                          products#new
       edit_product GET    /products/:id/edit(.:format)                     products#edit
            product GET    /products/:id(.:format)                          products#show
                    PUT    /products/:id(.:format)                          products#update
                    DELETE /products/:id(.:format)                          products#destroy
 <%=  link_to "Reviews", product_reviews_path(@product) %>
<h1>Reviews</h1>

<% @product = Product.find(params[:product_id]) %>

<table>
  <tr>
    <th>Content</th>
  </tr>

<% @product.reviews.each do |review| %>
  <tr>
    <td><%= review.content %></td>
  </tr>
<% end %>
</table>
class ReviewsController < ApplicationController

    def index
    @product = Product.find(params[:product_id])
        @reviews = @product.reviews
    end

end
<h1>Reviews</h1>

<% @product = Product.find(params[:product_id]) %>

<table>
  <tr>
    <th>Content</th>
  </tr>

<% @reviews.each do |review| %>
  <tr>
    <td><%= review.content %></td>
  </tr>
<% end %>
</table>

<br />
评论
内容


现在,它将在单独的页面上显示评论!:)

你能描述一下你的具体问题吗?你能给我们看一些相关的源代码吗。这将有助于我们的行动,而不仅仅是为我们提供到您的github回购的链接。嗨!我已经更新了我的帖子。谢谢你能描述一下你的具体问题吗?你能给我们看一些相关的源代码吗。这将有助于我们的行动,而不仅仅是为我们提供到您的github回购的链接。嗨!我已经更新了我的帖子。谢谢