标签: mongoid

Mongoid - 通过引用文档查询

我有一个名为Ad的模型,如下所示:

class Ad
  include Mongoid::Document
  referenced_in :category
end
Run Code Online (Sandbox Code Playgroud)

和类别模型:

class Category
  include Mongoid::Document
  referenced_in :domain
  references_many :ads
end
Run Code Online (Sandbox Code Playgroud)

如何按域选择广告?我试过用,Ad.where('category.domain_id' => domain.id)但这不起作用.

ruby ruby-on-rails mongodb mongoid

3
推荐指数
1
解决办法
2146
查看次数

使用版本控制进行多对多操作

假设用户想要创建一个由其他用户创建的项目组成的集合.项目的Mongoid Document具有版本控制,创建该集合的用户可能不喜欢项目作者对集合项目所做的更改.因此,我希望set文档引用项目的特定版本,允许set author更新项目引用(如果需要).我计划在设置文档中添加一个项目版本号数组,以及一些获取特定版本的设置项目和更新项目版本的方法.你觉得这种方法合理吗?你会如何解决这个问题?

class Item
  include Mongoid::Document
  include Mongoid::Paranoia
  include Mongoid::Versioning
  field :title, type: String
  has_and_belongs_to_many :item_sets
end

class ItemSet
  include Mongoid::Document
  field :name, type: String
  field :item_versions, type: Array
  has_and_belongs_to_many :items
end
Run Code Online (Sandbox Code Playgroud)

version-control ruby-on-rails associations mongodb mongoid

3
推荐指数
1
解决办法
459
查看次数

如何在Mongoid中使用update_attributes for datetime_select helper?

我使用mongodb作为我的数据库和驱动程序mongoid.

我的一个模型Bill的字段是local_time,我在视图中使用了datetime_select:

.ym-fbox-select                    
  = f.label :local_time, "Time"
  = f.datetime_select :local_time 
Run Code Online (Sandbox Code Playgroud)

create行动是OK.但update行动不是.错误是这样的:

(eval):1: syntax error, unexpected tINTEGER, expecting ')'
    def local_time(1i)=(value)
Run Code Online (Sandbox Code Playgroud)

而且update是:

def update                                   
 @bill = Bill.find(params[:id])             

 respond_to do |format|                     
   if @bill.update_attributes(params[:bill])
Run Code Online (Sandbox Code Playgroud)

所以我想知道如何更新该local_time字段?

ruby-on-rails mongoid

3
推荐指数
1
解决办法
613
查看次数

在Rails中使用ActiveModel :: Serializer - JSON数据在json和index响应之间有所不同

我正在使用active_model_serializersgem来控制序列化数据,并看到一些奇怪的行为.我的代码看起来像这样:

模型和序列化器

class User
  include Mongoid::Document
  field :first_name, :type => String
  field :last_name,  :type => String

  def full_name
    first_name + " " + last_name
  end
end

class UserSerializer < ActiveModel::Serializer
  attributes :id, :first_name, :last_name, :full_name
end
Run Code Online (Sandbox Code Playgroud)

调节器

class UsersController < ApplicationController
  respond_to :json, :html

  def index
    @users = User.all
    respond_with @users
  end
end
Run Code Online (Sandbox Code Playgroud)

view(app/views/users/index.html.erb)

...
<script type="text/javascript">
  $(function(){
    // using a backbone collection to manage data
    App.users = new App.Collections.Users(<%= @users.to_json.html_sage %>);
  });
</script>
Run Code Online (Sandbox Code Playgroud)

现在,当我渲染视图时,我看到full_name我的数据中缺少属性(通过模型中的方法生成):

{ …
Run Code Online (Sandbox Code Playgroud)

ruby json ruby-on-rails mongoid active-model-serializers

3
推荐指数
1
解决办法
4227
查看次数

设置Mongoid本地化字段

我有在这两个区域设置一个局部领域enit.在我的管理面板中,我想在同一页面中设置两个文本区域的翻译

field :text, :type => String, localize: true
Run Code Online (Sandbox Code Playgroud)

我如何构建表单来编辑Rails中的两个值?

ruby-on-rails mongoid

3
推荐指数
1
解决办法
1116
查看次数

Mongoid和counter_cache列

我有评论模型:

class Comment
  include Mongoid::Document
  include Mongoid::Timestamps
  belongs_to :commentable, polymorphic: true, touch: true#, counter_cache: true
Run Code Online (Sandbox Code Playgroud)

当我跑:

Article.first.comments.count => 1 #without counter_cache: true
Run Code Online (Sandbox Code Playgroud)

但是"counter_cache:true"我得到:

Article.first.comments.count => NoMethodError:未定义的方法count' for nil:NilClass Article.first.comments => NoMethodError: undefined method计数'为nil:NilClass

有谁遇到过这样的问题?

ruby-on-rails counter-cache mongoid

3
推荐指数
1
解决办法
1774
查看次数

如何将Mongoid _id转换为时间戳(Rails)

我刚刚读了这篇SO帖子:

MongoDB的ObjectId如何生成?

根据一个答案,MongoDB ID不是随机的,并且可以轻松预测。您甚至可以将其转换为时间戳:

http://www.mongodb.org/display/DOCS/Object+ID

我想知道,是否可以使用gem 将_id(例如52a43584000064000269526852908452636872eda1000000)转换为时间戳mongoid

ruby-on-rails mongodb mongoid ruby-on-rails-3

3
推荐指数
1
解决办法
1674
查看次数

使用Mongoid Rails和Ruby的记录委托

我使用ruby 2,rails 4和mongoid-rails gem

我有两个型号:

class Product
  embeds_one :feature
end

class Feature
  embedded_in :product

  field :color, type: String
end
Run Code Online (Sandbox Code Playgroud)

让我们说我有一个产品:

p = Product.new
Run Code Online (Sandbox Code Playgroud)

我想能够打电话给:

p.color = "blue"
Run Code Online (Sandbox Code Playgroud)

而不是必须做:

p.feature.color = "blue"
Run Code Online (Sandbox Code Playgroud)

调用属性也是如此:

p.color
=> "blue"
Run Code Online (Sandbox Code Playgroud)

与不太理想(和目前的情况)

p.feature.color
=> "blue"
Run Code Online (Sandbox Code Playgroud)

我知道有活动记录你可以使用委托,但是如何在mongoid中设置它而不必用大量引用特征模型的方法来填充我的模型?

ruby ruby-on-rails delegation mongoid

3
推荐指数
1
解决办法
781
查看次数

为mongoid哈希字段设置默认哈希键

我有一个带有哈希字段的Mongoid模型.此Mongoid模型具有使用单个集合继承的子类.现在我想为主模型的每个子类设置不同的默认哈希键.

主要模型

 class Sport
   include Mongoid::Document
   field :rules, type: Hash, default: {}
 end
Run Code Online (Sandbox Code Playgroud)

我想为:rule hash字段设置不同的默认哈希键的子类.例如,对于足球我想要规则:{:offside =>'',:penalty =>''}对于拳击我们可能有规则的哈希键:{:biting =>'not allowed'}.开源应用程序Errbit使用子类中的常量来设置默认哈希键,但我可以看到他们如何使用常量来填充哈希:https://github.com/errbit/errbit/blob/master/app/车型/ issue_trackers/github_issues_tracker.rb

 class Sport::Football < Sport
 end

 class Sport::Boxing < Sport
 end
Run Code Online (Sandbox Code Playgroud)

我确实覆盖了子类中的字段定义,如下所示,它在rails控制台中有效.当我做一个= Sport :: Football.new然后调用a.smtp返回默认设置.但问题是,当我去父类并执行b = Sport.newb.smtp时,我希望它能够列出子类的所有默认键,但它没有,因为我已经覆盖了子类中的哈希字段.

 class Sport::Football < Sport
    field :rules, type: Hash, default: {:offside => '', :penalty => ''}
 end
Run Code Online (Sandbox Code Playgroud)

有没有办法为子类设置默认哈希键而不覆盖字段定义.可以通过覆盖每个子类中哈希字段的setter和getter来做到这一点.

ruby-on-rails mongodb mongoid ruby-on-rails-4 mongoid4

3
推荐指数
1
解决办法
2128
查看次数

获取所有孩子的孩子,依此类推

我正在使用MongoDb作为数据库。

我要所有孩子的孩子等等。假设

  • A有B&C孩子
  • B有D&E孩子
  • D有F&G孩子

因此,当我查询子节点A时。我得到所有孩子作为输出,例如BCDEFG

 C = Customer.find_by(:id => "SOME_ID")
 C.children #list all children upto one level
Run Code Online (Sandbox Code Playgroud)

因此,谁能给我建议的方式,让孩子递归。

客户模型

class Customer

  include Mongoid::Document
  field :email, type: String
  field :referral_id, type: String
  belongs_to :parent, class_name: 'Customer',foreign_key: "referral_id", optional: true
  has_many :children, :class_name => 'Customer', :foreign_key => "referral_id"

end
Run Code Online (Sandbox Code Playgroud)

有人可以帮我吗。或建议一种方法来完成此任务。

ruby ruby-on-rails mongodb mongoid ruby-on-rails-3

3
推荐指数
1
解决办法
766
查看次数