我有一篇与用户有很多关系的文章,反之亦然。当我创建以用户身份登录的文章时,将使用与用户的关系创建文章。所以关系正在发挥作用。我希望其他用户能够加入这篇文章,所以基本上,我想要一个按钮将current_user推送到许多用户的数组/列表。
我完全不知道如何进行这个过程...感谢任何帮助
答案 0 :(得分:1)
因此,用户可以拥有多篇文章,每篇文章都可以属于多个用户?听起来像has_and_belongs_to_many
关系。看看相关的Rails文档:
http://guides.rubyonrails.org/association_basics.html#the-has-and-belongs-to-many-association
简而言之,您有一个articles_users
表格,其中每一行都包含article_id
和user_id
。向文章添加新用户时,只需在该表中创建另一条记录。
或者,如果您认为自己将作为一个单独的实体使用该关系,则可以查看has_many :through
。即第1条}}。
http://guides.rubyonrails.org/association_basics.html#the-has-many-through-association
为了帮助您做出决定,本指南提供了一些建议:
答案 1 :(得分:0)
#app/models/user.rb
class User < ActiveRecord::Base
has_many :written_articles, class_name: "Article", foreign_key: :user_id
has_and_belongs_to_many :articles
end
#app/models/article.rb
class Article < ActiveRecord::Base
belongs_to :user #-> for the original owner
has_and_belongs_to_many :users
end
以上是has_and_belongs_to_many
关联,可让您将用户添加到article
:
#config/routes.rb
resources :articles do
match "users/:id", to: :users, via: [:post, :delete] #-> url.com/articles/:article_id/users/:id
end
#app/controllers/articles_controller.rb
class ArticlesController < ApplicationController
def users
@article = Article.find params[:article_id]
@user = User.find params[:id]
if request.post?
@article.users << @user
elsif request.delete?
@article.users.delete @user
end
#redirect somewhere
end
end
这将允许您使用:
<%= link_to "Add User", article_user_path(@article, @user), method: :post %>
<%= link_to "remove User", article_user_path(@article, @user), method: :delete %>