Ruby on rails 如何基于Rails中属性的存在创建条件?
我在likes_控制器中有以下代码,只要有所有者,它就可以正常工作。如果没有,它就会崩溃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
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谢谢!我使用了第二个选项,但我对它做了一点修改,因为我希望用户喜欢它,不管它是否有所有者。