为has_many belongs_to Association - Rails 4编写范围

时间:2016-03-24 03:18:09

标签: ruby-on-rails

我是rails的新手,所以非常感谢您的帮助和建议。

  

目的:

  • 我的目的是仅显示属于未过期广告的申请表。
  • 目前我的用户已申请所有招聘广告
  • 目前 - 我创建了3个广告 - 其中2个已激活,1个已过期
  • 我可以按@user.forms.count计算所有用户申请表 - 这将显示所有广告的所有表单
  • 可以告诉我如何仅显示用户尚未过期的广告形式
  

模型

user.rb
has_many forms

form.rb
belongs_to user
belongs_to advert

advert.rb
has_may forms

scope :active_adverts, -> {where(['deadline >= ?', Date.current])}
  

users_controller.rb

  def dashboard
    if current_user
      @user = User.find(current_user)
      @user_applications = @user.forms
      @form = @user.forms.find(params[:id])
    else  
      redirect_to error_path
    end
  end

我在“views / users / dashboard.html.erb”<%= @user.forms.where(advert: @form.advert.active_advert).count %>视图中尝试了此操作,但我发现这样做无效。你的建议将不胜感激

1 个答案:

答案 0 :(得分:1)

您可以像这样定义scope

class User < ActiveRecord::Base
  has_many :forms
  has_many :adverts, through: :forms # <-- The change here
end

class Advert < ActiveRecord::Base
  has_many :forms
  scope :active, -> { where('deadline > ?', Time.now) } # <-- The change here
end

class Form < ActiveRecord::Base
  belongs_to :user
  belongs_to :advert
end

所以你的count function将是:

@users.adverts.active.count