0

投稿を作成するためのフォームがあります。このフォームには投稿にもタグがあり、ユーザーが所有しています。フォームは仮想属性:tag_idsを使用しています。

このようなことをしたいと思います。ここでは、find_or_create_by_name_and_user_idを実行してから、current_user.idを渡します。

def tag_ids=(tags_string)
    self.taggings.destroy_all
    tag_names = tags_string.split(",").collect{|s| s.strip.downcase}.uniq
    tag_names.each do |tag_name|
      tag = Tag.find_or_create_by_name_and_user_id(tag_name, current_user.id)
      tagging = self.taggings.new
      tagging.tag_id = tag.id
    end
end

私が読んだことから、これはそれがどのように機能するべきかではありません。現在のユーザーは、PostsContollercreateメソッドで呼び出される必要があります。

def create
  @post = Post.new(params[:post])
  @post.user = current_user
  respond_to do |format|
     if params[:commit]
     @post.save

... 終わり

これは私が立ち往生しているところです。 パラメータがすべての属性を渡している場合、:name属性と:user_id属性を持つタグモデルにcurrent_user idを挿入するにはどうすればよいですか?

私はまた、これは私の協会のおかげでうまくいくはずだと読みました。

ユーザー-has_many投稿; has_manyタグ

投稿-belongs_toユーザー; has_manyタグ付け; タグ付けによるhas_manyタグ

タグ-多くのタグ付けがあります。has_manyはタグ付けを通じて投稿します。所属するユーザー

タグ付け-belongs_topost; 所属するタグ

4

1 に答える 1

0

モデルでcurrent_userを取得することはできません。明示的に渡す必要があります。これを行うには、いくつかのハックがある可能性がありますが、簡単な方法は、ユーザーがすでにpostに格納されているため、self.user.id上記のメソッドがpost model、postuserにある場合に役立ちます。ユーザーにタグを付けています。

Tag.find_or_create_by_name_and_user_id(tag_name, self.user.id)

于 2012-11-06T05:56:33.687 に答える