我如何在模型中不使用current_user

时间:2012-11-06 05:41:23

标签: ruby-on-rails ruby-on-rails-3 activerecord

我有一个表单来创建帖子。此表单在帖子上也有标签,并且由用户拥有。表单使用虚拟属性: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

... 端

这就是我被困住的地方。 如果params传递了所有属性,我如何将current_user id注入到具有:name和:user_id属性的标记模型中?

我还读到这应该有效,因为我的关联。

用户 - has_many帖子; has_many标签

发布 - belongs_to用户; has_many标签; has_many标签通过标签

标签 - 有很多标签; has_many通过标记发布帖子; belongs_to用户

标记 - belongs_to post; belongs_to标签

1 个答案:

答案 0 :(得分:0)

你不能在模型中获得current_user,你必须明确传递,可能有几个黑客来做这个,但简单的方法是,用户已经存储在帖子中,所以self.user.id是有用的 如果上述方法在post模型中,则post用户正在标记用户。

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