Ruby on rails 使用mongoid将对象推入文档时出现NoMethodError
我有这个问题,我尝试了很多不同的方法,但是 每次它都会犯那个错误 环境: Rails 3.0.5 Mongoid 2.0.1Ruby 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
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保存到一个事务中,以避免在数据库中出现不一致的数据。
<代码>用户。其中返回一个数组,该数组被分配给<代码> @用户>代码>谢谢。它很好用。现在我可以重构所有这些代码了。