如何为另一个表中的所有用户创建userd_id

时间:2015-07-07 11:44:59

标签: ruby-on-rails ruby-on-rails-4

我有3个型号:

user: id
has_many :article_users
has_many :articles, through: :article_users

article: user_id
has_many :article_users
has_many :users, through: :article_users

article_user: user_id, article_id
belongs_to: users
belongs_to: articles

创建新文章时,如何在id模型中将所有用户user_id添加到article_user

def create
  @article = Article.new(article_params)
  ...
end

2 个答案:

答案 0 :(得分:0)

您可以将新文章的用户设置为当前用户(假设您有current_user方法)

 @article = Article.new(article_params)
 @article.user = current_user

我不明白你的意思"如何添加所有用户ID" - 你可以通过这个来扩展你的实际意思吗?

编辑:要将文章与所有现有用户相关联,您可以执行类似

的操作
 @article = Article.new(article_params)
 @article.save
 @article.users << User.all

然而,这感觉有点奇怪:它会创建很多连接表记录,而实际上它可以用一个&#34; bit&#34;来概括。信息,例如&#34;所有用户都可以访问这些信息吗?&#34;。如果您以后创建新用户该怎么办 - 该用户将无法访问此文章。你想要他们吗?

如果您希望所有用户都可以使用文章&#34;而不是&#34;可用于以下特定用户列表(可能恰好是所有用户&#34;),然后您可以在文章的表中添加一个布尔字段,名为&#34; available_to_all_users&#34 ;或者其他的东西。然后,当您想要找出给定用户可以使用哪些文章时,您可以使用以下方法:

#in User
def available_articles
  (Article.where(available_to_all_users: true).all + self.articles).uniq
end 

答案 1 :(得分:0)

没有这种方法可以将user_id添加到a​​rticle_users表中以获取现有记录。您必须使用迁移手动填充user_id,但如果您在文章表中有user_id值,则有可能添加user_id