添加/更新用户到文章Rails

时间:2016-01-14 04:53:00

标签: ruby-on-rails

我有一篇与用户有很多关系的文章,反之亦然。当我创建以用户身份登录的文章时,将使用与用户的关系创建文章。所以关系正在发挥作用。我希望其他用户能够加入这篇文章,所以基本上,我想要一个按钮将current_user推送到许多用户的数组/列表。

我完全不知道如何进行这个过程...感谢任何帮助

2 个答案:

答案 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_iduser_id。向文章添加新用户时,只需在该表中创建另一条记录。

或者,如果您认为自己将作为一个单独的实体使用该关系,则可以查看has_many :through。即第1条}}。

http://guides.rubyonrails.org/association_basics.html#the-has-many-through-association

为了帮助您做出决定,本指南提供了一些建议:

http://guides.rubyonrails.org/association_basics.html#choosing-between-has-many-through-and-has-and-belongs-to-many

答案 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 %>