has_and_belongs_to_many联想混乱

时间:2014-12-01 19:02:40

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

所以我有一个具有博客模型和用户模型的应用程序。

现在,用户可以订阅许多不同的博客,用户也可以创建自己的许多博客。

协会会是什么样子?

现在我的模型如下所示:

Blog.rb:

class Blog < ActiveRecord::Base
  has_and_belongs_to_many :users
  has_many :posts

end

User.rb:

class User < ActiveRecord::Base
  # Include default devise modules. Others available are:
  # :confirmable, :lockable, :timeoutable and :omniauthable
  devise :database_authenticatable, :registerable,
         :recoverable, :rememberable, :trackable, 
         :validatable

  has_and_belongs_to_many :blogs     

  validates :email, uniqueness: true, presence: true
  validates_presence_of :password, on: :create         

end

用户表有一个blog_id:整数字段,博客有一个user_id:整数字段。

这是对的吗?

命令如何工作? I.E:

u = User.last
b = u.blogs.build(title: "bla")
b.user (shows the owner of the blog)
b.users (shows the users that have subscribed to the blog)

最终,我希望允许用户订阅其他人的博客,并创建自己的博客。

1 个答案:

答案 0 :(得分:2)

您将要添加第三个模型&#39;订阅&#39;。那么你将要使用&#39; has_many_through:&#39;协会。有关详细示例,请阅读导轨指南的此部分。 http://guides.rubyonrails.org/association_basics.html#the-has-many-through-association

创建关联后,您将要沿着这些方向执行某些操作: 1)确保你嵌入了订阅&#39;博客路线下方的路线正确。

resources :blogs, only: [] do
    resources :subscriptions, only: [:create, :destroy]

2)在app / views / subscriptions中创建一个_subscription.html.erb部分

3)在博客#show

中渲染部分内容
<%= render partial: 'subscriptions/_subscription, locals: {blog: @blog}

4)添加在partial中添加(创建)订阅的功能:(这只是为了添加订阅,你还想添加删除功能)

 <%= link_to [blog, Subscription.new], class: 'btn btn-primary', method: :post do %>
   <i class="glyphicon glyphicon-star"> </i>&nbsp; Subscribe
 <% end %>

5)添加&#39;创建方法&#39; to subscriptions_controller.rb

   def create
     @blog = Blog.find(params[:blog_id])
     subscription = current_user.subscriptions.build(blog: @blog)

     if subscription.save
       # Add code
     else
       # Add code
     end
   end

这应该是足够的方向让你到达终点线。祝你好运:)