所以我有一个具有博客模型和用户模型的应用程序。
现在,用户可以订阅许多不同的博客,用户也可以创建自己的许多博客。
协会会是什么样子?
现在我的模型如下所示:
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)
最终,我希望允许用户订阅其他人的博客,并创建自己的博客。
答案 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> 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
这应该是足够的方向让你到达终点线。祝你好运:)