1

私は次のように連鎖可能なメソッドを作成しようとしています。

@blog = Blog.new.set_user(current_user).save

それ以外の

@blog = Blog.new
@blog.user = current_user

モデル内で次のメソッドを定義しました。

def set_user(user)
  self.user = user
  return self
end

それが機能しないことを除いて。更新されたインスタンスを返すメソッドを作成して、さらにチェーンを実行できるようにするにはどうすればよいですか?

更新: 私の悪い、これが私が間違っていたことです:連鎖可能なメソッドは「user」という名前だったので、モデル自体のblog.userメソッドと競合していました。名前をユニークで出来上がりに変更しました!できます。

4

2 に答える 2

1

メソッドset_userはユーザーインスタンスを返す必要があります。selfこの文脈ではBlog

def set_user(user)
  user
end

Railsを使用していて、間に関連付けがBlogあり、Userすでに実行できる場合

blog.userまたはblog.users、これらのモデル間にある関連付けのタイプに基づいています。

于 2012-11-20T19:01:19.427 に答える
1

Railsでこれを回避し、モデルの関連付けとスコープを使用して作業の一部を実行しようとします。

@blog = current_user.blogs.create

あなたが尋ねた質問について、自分自身を返すことは仕事iddを行うべきです、あなたがブログを作成するときにコンソールの出力を書くことができますか、そしてまた私たちに出力が何であるかを知らせてください:

@blog.inspect

たぶんエラーはどこかにあります...

于 2012-11-20T19:12:31.213 に答える