Ruby on rails 如何基于Rails中属性的存在创建条件?

Ruby on rails 如何基于Rails中属性的存在创建条件?,ruby-on-rails,nomethoderror,Ruby On Rails,Nomethoderror,我在likes_控制器中有以下代码,只要有所有者,它就可以正常工作。如果没有,它就会崩溃 def create @thing = Thing.find(params[:like][:liked_id]) user = @thing.owner current_user.like!(@thing) current_user.follow!(user) respond_with @thing end 我试过使用 user = @thing.owner

我在likes_控制器中有以下代码,只要有所有者,它就可以正常工作。如果没有,它就会崩溃

  def create
    @thing = Thing.find(params[:like][:liked_id])
    user = @thing.owner
    current_user.like!(@thing)
    current_user.follow!(user)
    respond_with @thing
  end
我试过使用

user = @thing.owner if @thing.owner.exists?
但我有一个命名错误:

NoMethodError in LikesController#create

undefined method `exists?' for nil:NilClass
如何检查所有者的存在

我现在还注意到,我必须将第二行放在当前用户上。follow!用户在块中,否则它将再次中断

编辑:使用@Amadan的答案,这是有效的:

def create
    @thing = Thing.find(params[:like][:liked_id])
    current_user.like!(@thing)
    user = @thing.owner
    if user
      current_user.follow!(user)
    end
    respond_with @thing
  end
附加信息:如果有人真的使用过它,我应该指出,要让它正常工作,还需要再做一点小改动。如果用户在跟踪某个对象的所有者时试图喜欢该对象,则上述代码会出错

所以不是

if user
我曾经

if user && !current_user.following?(user)
希望这对您有所帮助。

在Rails中,您可以执行以下操作:

user = @thing.owner if @thing.owner.present?
插入以下行:

return unless user
出于风格原因,有些人可能不喜欢它,因此您可以使用以下替代方案:

def create
  @thing = Thing.find(params[:like][:liked_id])
  user = @thing.owner
  if user
    current_user.like!(@thing)
    current_user.follow!(user)
    respond_with @thing
  end
end

我已经试过了,在像ControllerCreate中得到了RuntimeError,称为id for nil,它会被错误地设置为4-如果你真的想要nil的id,请使用object_id,这与我在根本不检查的情况下得到的错误相同。在你的用户类中如何定义所有者?这是ActiveRecord吗?这东西是主人的吗?不是。它只在Thing类中定义:归属于:所有者,类名称:用户,外键:所有者\u ID谢谢!我使用了第二个选项,但我对它做了一点修改,因为我希望用户喜欢它,不管它是否有所有者。