我有一个表单来创建帖子。此表单在帖子上也有标签,并且由用户拥有。表单使用虚拟属性: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标签
答案 0 :(得分:0)
你不能在模型中获得current_user,你必须明确传递,可能有几个黑客来做这个,但简单的方法是,用户已经存储在帖子中,所以self.user.id
是有用的
如果上述方法在post模型中,则post用户正在标记用户。
Tag.find_or_create_by_name_and_user_id(tag_name, self.user.id)