我有一个名为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)但这不起作用.
假设用户想要创建一个由其他用户创建的项目组成的集合.项目的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) 我使用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字段?
我正在使用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)
...
<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) 我有在这两个区域设置一个局部领域en和it.在我的管理面板中,我想在同一页面中设置两个文本区域的翻译
field :text, :type => String, localize: true
Run Code Online (Sandbox Code Playgroud)
我如何构建表单来编辑Rails中的两个值?
我有评论模型:
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
有谁遇到过这样的问题?
我刚刚读了这篇SO帖子:
根据一个答案,MongoDB ID不是随机的,并且可以轻松预测。您甚至可以将其转换为时间戳:
http://www.mongodb.org/display/DOCS/Object+ID
我想知道,是否可以使用gem 将_id(例如52a435840000640002695268或52908452636872eda1000000)转换为时间戳mongoid?
我使用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中设置它而不必用大量引用特征模型的方法来填充我的模型?
我有一个带有哈希字段的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.new和b.smtp时,我希望它能够列出子类的所有默认键,但它没有,因为我已经覆盖了子类中的哈希字段.
class Sport::Football < Sport
field :rules, type: Hash, default: {:offside => '', :penalty => ''}
end
Run Code Online (Sandbox Code Playgroud)
有没有办法为子类设置默认哈希键而不覆盖字段定义.可以通过覆盖每个子类中哈希字段的setter和getter来做到这一点.
我正在使用MongoDb作为数据库。
我要所有孩子的孩子等等。假设
因此,当我查询子节点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)
有人可以帮我吗。或建议一种方法来完成此任务。
mongoid ×10
ruby-on-rails ×10
mongodb ×5
ruby ×4
associations ×1
delegation ×1
json ×1
mongoid4 ×1