1

我在 likes_controller 中有以下代码,只要 athingowner. 如果没有,它会破裂。

  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:

NoMethodError in LikesController#create

undefined method `exists?' for nil:NilClass

如何检查 是否存在owner

我现在也注意到我必须将第二行 ( current_user.follow!(user)) 放在块中,否则它会再次中断......

编辑:这有效(使用@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

附加信息:如果有人实际使用过它,我应该指出,还需要再做一点小改动才能让它工作。如果 auser尝试likeathing当它们已经followingthing's时,上面的代码会出错owner

所以而不是

if user

我用了

if user && !current_user.following?(user)

希望这会有所帮助。

4

2 回答 2

0

在 Rails 中,您可以:

user = @thing.owner if @thing.owner.present?
于 2012-11-28T00:43:56.520 回答
0

插入这一行:

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
于 2012-11-28T00:52:25.460 回答