Ruby on rails 使用mongoid将对象推入文档时出现NoMethodError

Ruby on rails 使用mongoid将对象推入文档时出现NoMethodError,ruby-on-rails,arrays,ruby-on-rails-3,mongoid,Ruby On Rails,Arrays,Ruby On Rails 3,Mongoid,我有这个问题,我尝试了很多不同的方法,但是 每次它都会犯那个错误 环境: Rails 3.0.5 Mongoid 2.0.1 class User include Mongoid::Document field :name has_and_belongs_to_many :companies end class Company include Mongoid::Document field :name has_and_belongs_to_many :user

我有这个问题,我尝试了很多不同的方法,但是 每次它都会犯那个错误

环境:

Rails 3.0.5

Mongoid 2.0.1

class User
 include Mongoid::Document 

 field :name 

 has_and_belongs_to_many :companies 
end 

class Company 
 include Mongoid::Document 

 field :name 

 has_and_belongs_to_many :users 
end 
在我的UserController方法中,创建一个

@user = User.where(:email => params[:user][:email]) 
 if @user.count > 0 
  @user.companies.push(@company) 
  @user.save 
  @company.users.push(@user) 
  @company.save 
 else 
  @user = User.create(:name => params[:user][:name], 
                      :email => params[:user][:email], 
                      :password => "123456") 

  @user.companies.push(@company) 
  @user.save 
  @company.users.push(@user) 
  @company.save 
 end 
当用户不存在时,效果很好

但如果用户已经在数据库中,则会出现错误

NoMethodError in UserController#create 
undefined method `companies' for #<Array:0x10679f638> 
用户控制器中的NoMethodError#创建 #的未定义方法“公司” 但毕竟它将对象推入文档中

我不知道我是否错过了什么

如果有人知道如何解决这个问题。。。那太好了

提前感谢。

试试这个:

@user = User.where(:email => params[:user][:email]).first
另一方面,您可能还希望将这些代码中的一部分推送到您的一个模型中,即用户模型或公司模型中,以便在控制器中只有一个调用,例如:

@company.add_user(@user)
然后,添加用户的实现细节将封装在您的模型中


您可能还想考虑将两个调用嵌入到ActureCordR::BaseSype保存到一个事务中,以避免在数据库中出现不一致的数据。

<代码>用户。其中返回一个数组,该数组被分配给<代码> @用户>代码>谢谢。它很好用。现在我可以重构所有这些代码了。