必须有更好的方法来做到这一点。我的Favorite
模型属于User
,而Applicant
属于Gig
和User
。我正在尝试有效地确定用户是否已申请Gig
被收藏(<% if @application.present? %>
)。
我尝试使用像@favorites.each.gig
这样的东西链接集合无济于事。虽然以下Favorites
的索引操作似乎有效,但它确实很冗长且效率低下。有什么更简洁的方法呢?
def index
@favorites = Favorite.where(:candidate_id => current_candidate)
@applications = Applicant.where(:candidate_id => current_candidate)
@favorites.each do |favorite|
@applications.each do |application|
if favorite.gig.id == application.id
@application = application
end
end
end
end
class User
has_many :applicants
has_many :gigs, :through => :applicants
has_many :favorites
end
class Favorite < ActiveRecord::Base
belongs_to :candidate
belongs_to :gig
end
class Applicant < ActiveRecord::Base
belongs_to :gig
belongs_to :candidate
end
class Candidate < ActiveRecord::Base
has_many :applicants
has_many :gigs, :through => :applicants
has_many :favorites
end
class Gig < ActiveRecord::Base
belongs_to :employer
has_many :applicants
has_many :favorites
has_many :users, :through => :applicants
end
答案 0 :(得分:0)
由于缺乏更好的答案,这就是我的想法:
-
用户强>
您的用户模型应该是这样构建的(我只是突出显示foreign keys
,我想你无论如何都会这样):
#app/models/user.rb
Class User < ActiveRecord::Base
has_many :applicants
has_many :gigs, :through => :applicants, foreign_key: "candidate_id"
has_many :favorites, foreign_key: "candidate_id"
end
这意味着您可以致电:
current_candidate.favorites
current_candidate.applicants
这样就无需您@applications
和@favorites
查询
-
<强>收藏强>
您基本上想要返回boolean
applicant
是否属于favorite
模型的一部分。实质上,对于favorite
所提出的每个candidate
,您都可以检查它是否有应用
我会这样做,方法是使用ActiveRecord Association Extension在favorites
方法上设置实例方法,如下所示:
#app/models/user.rb
Class User < ActiveRecord::Base
has_many :favorites do
def applied?
self.applicant.exists? proxy_association.owner.gig.id
end
end
end
这将允许您致电:
<%= for favorite in current_candidate.favorites do %>
<%= if favorite.applied? %>
<% end %>
这是未经测试的&amp;高度投机。不过,我希望它能给你一些想法!