我正在建立用户,网站和标签模型,但是不确定正确的关联吗?
这是一个CRUD应用程序,我要允许用户创建“网站”(本质上是书签),并能够向该网站添加“标签”,以便可以过滤网站。
我有三个表:UnmarshalException
,User
,Website
我希望用户拥有多个网站,网站具有多个标签,标签属于网站,并且用户通过网站具有多个标签。
我已经设置了以下模型:
Tag
我正在通过发帖请求保存标签:
class User < ActiveRecord::Base
has_many :websites
has_many :tags, through: :websites
end
class Website < ActiveRecord::Base
belongs_to :user
has_many :tags
end
class Tag < ActiveRecord::Base
belongs_to :website
end
当我在post '/websites' do
if logged_in?
if params[:content] == ""
redirect to "/websites/new"
else
@website = current_user.websites.build(content: params[:content])
binding.pry
@tag = current_user.tags.build(content: params[:dropdown])
if @website.save && @tag.save
redirect to "/websites/#{@website.id}"
else
redirect to "/websites/new"
end
end
else
redirect to '/login'
end
end
处检查params
时,它给了我预期的结果:
binding.pry
我希望能够保存一个用户实例,然后使用{content=>"tryingtoaddtag.com", "dropdown"=>"Clothing"}
显示与该用户的网站关联的所有标签。我不太清楚自己在搞砸。谢谢。
答案 0 :(得分:1)
阅读此Article,然后尝试以下操作:
class Tag < ActiveRecord::Base
belongs_to :website
delegate :user, :to => :website, :allow_nil => true
end
如果这不起作用。在User
模型中将范围与
def tags
Tags.where(website_id: self.websites.pluck(:id))
end
答案 1 :(得分:1)
考虑一个网站has_many:tags
class User < ActiveRecord::Base
has_many :websites
def user_tags
Tag.joins(:website).where(websites: {user_id: self.id})
end
end
class Website < ActiveRecord::Base
belongs_to :user
has_many :tags
end
class Tag < ActiveRecord::Base
belongs_to :website
end
查询-
user = User.first
user.user_tags
答案 2 :(得分:1)
尝试以下操作,
class User < ActiveRecord::Base
has_many :websites
end
class Website < ActiveRecord::Base
belongs_to :user
has_many :tags
end
class Tag < ActiveRecord::Base
belongs_to :website
scope :user_tags, ->(user) { joins(:website).where(websites: {user_id: user}) }
end
查询看起来像(对于@user
对象)
Tag.user_tags(@user)