1

thinglikes_controller に次のコードがあり、 aがある限り正常に動作し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 を受け取ります:

NoMethodError in LikesController#create

undefined method `exists?' for nil:NilClass

の存在を確認するにはどうすればよいownerですか?

また、ブロックに 2 行目 ( ) を挿入する必要があることに気付きました。そう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

追加情報: 誰かが実際にこれを使用したことがある場合は、これを機能させるためにもう 1 つの小さな変更が必要であることを指摘しておく必要があります。上記のコードは、すでにの であるときに をuserしようとするとエラーになります。likethingfollowingthingowner

だから代わりに

if user

使った

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

これが役に立てば幸いです。

4

2 に答える 2

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 に答える
0

Rails では、次のことができます。

user = @thing.owner if @thing.owner.present?
于 2012-11-28T00:43:56.520 に答える