标签: mongoid

Rails:参数数量错误(给定 2 个,预期 1 个)MongoID

我正在尝试打开我的 MongoDB 模型,但是出现以下错误:

MONGODB | xxx.xx.x.xxx:27017 | db.find | FAILED | wrong number of arguments (given 2, expected 1) | 0.013306s

我的 Mongo 凭据是正确的,并且我可以连接到 Rails 外部的数据库集合。

错误的前几行是:

Started GET "/admin/xsl_sheet" for xxx.xxx.xxx.xxx at 2020-03-03 13:49:54 UTC
Processing by RailsAdmin::MainController#index as HTML
Parameters: {"model_name"=>"xsl_sheet"}
(5.0ms)  SELECT `companies`.`name` FROM `companies` WHERE `companies`.`id` = 4
CACHE (0.1ms)  SELECT `companies`.`name` FROM `companies` WHERE `companies`.`id` = 4  [["id", "4"]]
CACHE (0.2ms)  SELECT `companies`.`name` FROM `companies` WHERE `companies`.`id` = 4  [["id", "4"]]

MONGODB | xxx.xx.x.xxx:27017 | …
Run Code Online (Sandbox Code Playgroud)

ruby-on-rails mongodb mongoid rails-admin

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

如何将ActiveModel :: Base.include_root_in_json设置为false?

我正在使用Rails 3 w/Mongoid,(所以没有ActiveRecord).Mongoid使用ActiveModel的"to_json"方法,默认情况下该方法包含JSON中的根对象(我不想要).

我试过把它放在初始化器中:

ActiveModel::Base.include_root_in_json = false
Run Code Online (Sandbox Code Playgroud)

但得到错误

uninitialized constant ActiveModel::Base
Run Code Online (Sandbox Code Playgroud)

我有什么想法可以改变这个吗?我直接在源代码中更改了默认值并且它工作正常,但显然我想要正确地执行它.

该变量在此文件的顶部定义: Github - activemodel/lib/active_model/serializers/json.rb

从文档:"选项ActiveModel :: Base.include_root_in_json控制to_json的顶级行为.默认情况下是真的."

ruby-on-rails activemodel mongoid ruby-on-rails-3

0
推荐指数
1
解决办法
3379
查看次数

Mongoid - 获取包括嵌入文档在内的所有属性

有没有一种简单的方法来获取Mongoid文档的所有属性,包括嵌入文档的属性?

例如,如果我有以下文件:

class Person
  include Mongoid::Document
  embeds_many :phone_numbers
  field :name
end

class PhoneNumner
  include Mongoid::Document
  embedded_in :person, :inverse_of => :phone_numbers
  field :number
end
Run Code Online (Sandbox Code Playgroud)

我想获得这样Person的属性和电话号码:

{ :name => "Jenny", :phone_numbers => [{ :number => '867-5309' }, { :number => '867-5309' }] }
Run Code Online (Sandbox Code Playgroud)

ruby mongodb mongoid

0
推荐指数
1
解决办法
1477
查看次数

使用带有mongoid的factory_girl来测试referenced_in/references_many

我正在尝试为订阅服务测试相关文档.每个订阅都嵌入在一个帐户中并引用一个计划.以下是各种代码:

帐户:

Factory.define :account, :class => Account do |a|
  a.subdomain 'test'
  a.agents { [ Factory.build(:user) ] }
  a.subscription { Factory.build(:free_subscription) }
end
Run Code Online (Sandbox Code Playgroud)

订阅:

Factory.define :free_subscription, :class => Subscription do |s|
  s.started_at Time.now
  s.plan { Factory.build(:free_plan) }
end
Run Code Online (Sandbox Code Playgroud)

计划:

Factory.define :free_plan, :class => Plan do |p|
  p.plan_name 'Free'
  p.cost 0
end
Run Code Online (Sandbox Code Playgroud)

错误:

Mongoid::Errors::InvalidCollection: Access to the collection for Subscription is not allowed since it is an embedded document, please access a collection from the root document.
Run Code Online (Sandbox Code Playgroud)

如果我注释掉将计划链接到订阅的行,那么测试就可以工作,但显然我无法测试订阅是否有计划.

任何建议将不胜感激.

更新:

以下是模型:

class …
Run Code Online (Sandbox Code Playgroud)

ruby-on-rails mongoid ruby-on-rails-3 factory-bot

0
推荐指数
1
解决办法
3772
查看次数

将属性传递给Mongoid update_attributes()

我想从mongoid中使用这个函数:

person.update_attributes(first_name: "Jean", last_name: "Zorg")
Run Code Online (Sandbox Code Playgroud)

但我想从另一个变量传递所有属性.我怎么做?

编辑:谢谢大家的回复.我是红宝石的新手,所以起初我以为我犯了一个愚蠢的错误.错误是在一个完全不同的地方,正确的代码,为您的乐趣:

  def twitter
    # Scenarios:
    # 1. Player is already signed in with his fb account:
    #    we link the accounts and update the information.
    # 2. Player is new: we create the account.
    # 3. Player is old: we update the player's information.
    # login with a safe write.
    puts "twitter"
    twitter_details = {
      twitter_name: env["omniauth.auth"]['user_info']['name'], 
      twitter_nick: env["omniauth.auth"]['user_info']['nickname'],
      twitter_uid: env["omniauth.auth"]['uid']
    }
    if player_signed_in?
      @player = Player.find(current_player['_id']) 
    else
      @player = Player.first(conditions: {twitter_uid: env['omniauth.auth']['uid']})
    end …
Run Code Online (Sandbox Code Playgroud)

ruby ruby-on-rails mongoid

0
推荐指数
2
解决办法
4340
查看次数

FactoryGirl中的Mongoid哈希属性

如何为Mongoid类编写Factory Girl定义,其中一个属性是哈希?(它不是嵌入式文档)

Mongoid类看起来像

class Foo
  field :bar, :type => Hash
end
Run Code Online (Sandbox Code Playgroud)

所以一个实例Foo应该能够通过访问barfoo.bar['foobar'] = 1

这不能在Factory Girl定义中描述,但通过执行以下操作:

Factory.define :foo do |f|
  f.bar   {:foobar => 1}
end
Run Code Online (Sandbox Code Playgroud)

ruby-on-rails mongoid factory-bot

0
推荐指数
1
解决办法
677
查看次数

Mongoid无法创建记录

我不确定我的设置有什么问题......我无法创建一个mongoid记录(使用mongoid 3.0.0):

bundle exec rails console

ruby-1.9.2-p290 :045 >   u = NoUser.new
 => #<NoUser _id: 4ffc2e8487bc11b128000005, _type: nil, username: nil> 
ruby-1.9.2-p290 :046 > u.username = 'aaa1'
 => "aaa1" 
ruby-1.9.2-p290 :047 > u
 => #<NoUser _id: 4ffc2e8487bc11b128000005, _type: nil, username: "aaa1"> 
ruby-1.9.2-p290 :048 > u.save
NoMethodError: You have a nil object when you didn't expect it!
You might have expected an instance of Array.
The error occurred while evaluating nil.[]
    gems/moped-1.1.1/lib/moped/node.rb:74:in `block in command'
    gems/moped-1.1.1/lib/moped/node.rb:522:in `[]'
    gems/moped-1.1.1/lib/moped/node.rb:522:in `block (3 levels) in …
Run Code Online (Sandbox Code Playgroud)

ruby-on-rails mongoid

0
推荐指数
1
解决办法
547
查看次数

复合键上的Mongoid唯一约束

我正在尝试遵循Mongoid 3中的建议- 检查复合键的唯一性,以便在2个字段上具有唯一约束的模型.

id声明是这样的:

field :_id, type: String, default: &method(:generate_id)

private

  def generate_id
    user.id.to_s + offering.id.to_s
  end
Run Code Online (Sandbox Code Playgroud)

但是,如果我这样做,当我通过new实例化一个对象时它会有一个conniption因为它试图在它有用户和提供之前生成id而且它(正确地)不想使用id的id.我可以传入用户并提供构造函数参数,一切都很好.

我的问题是,这是正确的做法吗?考虑到为了得到一个独特的约束,我必须做的所有钝的古怪感觉都很脏.代码根本没有透露意图.有没有更好的办法?

ruby-on-rails mongodb mongoid

0
推荐指数
1
解决办法
973
查看次数

在Rails的活动管理中加载超时

我正在使用ActiveAdmin(https://github.com/gregbell/active_admin)进行Rails,并且我正在尝试加载用户模型的索引视图.这是我的app/admin/users.rb文件中的代码:

ActiveAdmin.register User do
    config.per_page = 10

    index :pagination_total => false do
    end
end
Run Code Online (Sandbox Code Playgroud)

我启用了分页,但看起来它仍在尝试加载所有用户,导致超时.如何让它一次只加载少数(例如10个)用户?

ruby-on-rails mongoid activeadmin

0
推荐指数
1
解决办法
764
查看次数

为mongoid创建模型(RAILS)

我必须将我的Rails应用程序连接到MongoDB,经过一些研究我发现了一个gem(mongoid).我的疑问是,如何创建模型?MongoDB上的集合看起来像下面的示例:

{
    "_id": {
        "$oid": "56fbf7e577550f39a5aea04a"
    },
    "id_test": "225|1",
    "array_ex1": [],
    "array_ex2": [
        "obj_ex1": {
            "field_obj_1": "text1",
            "field_obj_2": "text2",
            "field_obj_3": "text3",
         }
     ],
    "obj_ex2": {
       "field1: "textex1",
       "field2: "textex2",
       "field3: "textex3",
    },
    "flg_test": true
}
Run Code Online (Sandbox Code Playgroud)

ruby ruby-on-rails mongodb mongoid

0
推荐指数
1
解决办法
3608
查看次数