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

从我读到的内容来看,这不是它应该如何工作的。应该在 PostsContoller 创建方法中调用当前用户。

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

... 结尾

这就是我卡住的地方。 如果参数正在传递所有属性,我如何将 current_user id 注入具有 :name 和 :user_id 属性的标签模型中?

我还读到,由于我的关联,这应该可以工作。

用户 - has_many 帖子;has_many 标签

发布 - 属于用户;has_many 标签;has_many 标签通过标签

Tag - 有很多标签;has_many 通过标签发布帖子;属于用户

标记 - belongs_to 帖子;属于_to 标签

4

1 回答 1

0

您无法在模型中获取 current_user ,您必须显式传递,可能有一些技巧可以做到这一点,但简单的方法是,用户已经存储在帖子中,所以self.user.id很有用如果上述方法在帖子模型中,则发布用户正在标记用户。

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

于 2012-11-06T05:56:33.687 回答