实现在Rails中将Recipe添加到收藏夹并查找当前用户是否有'favorite_set?'一个食谱

时间:2016-02-19 08:39:14

标签: ruby-on-rails ruby-on-rails-3 ruby-on-rails-4 associations has-many-through

此问题与to相关,显示 has_many:通过关联。我有一个类似的关联,如答案中所示。我将引用参考。

  

$ rails g model FavoriteRecipe recipe_id:integer user_id:integer

# Join model connecting user and favorites
class FavoriteRecipe < ActiveRecord::Base
  belongs_to :recipe
  belongs_to :user
end

---

class User < ActiveRecord::Base
  has_many :recipes

  # Favorite recipes of user
  has_many :favorite_recipes # just the 'relationships'
  has_many :favorites, through: :favorite_recipes, source: :recipe # the actual recipes a user favorites
end

class Recipe < ActiveRecord::Base
  belongs_to :user

  # Favorited by users
  has_many :favorite_recipes # just the 'relationships'
  has_many :favorited_by, through: :favorite_recipes, source: :user # the actual users favoriting a recipe
end

我很想知道这个解决方案是否适用于加入模型的多对多关系,例如FavoriteRecipe具有布尔属性favorite_set。在迭代Recipes时,我想知道当前用户是否已经'收藏'此/ Recipes。像current_user.recipe.favorite_set?这样的东西,但当然要通过FavoriteRecipe加入模型。如果true显示'FAVORITE SET',则会选择收藏此recipe。我的实现是一个显示所有“食谱”并显示“最喜欢的设置”的提要,或者为“最喜欢的”一个或多个Recipes提供选项。

提前致谢。

1 个答案:

答案 0 :(得分:0)

为了解决这个问题,我在app/helpers

中创建了一个辅助模块
module ReminderHelper
  #Check if user has set reminder for a specific event
  def event_reminder_set? user, event
    EventReminder.where(user: user, event: event).any?
  end 
end

我在app/controllers/application_controller.rb

中加入了该模块
include ReminderHelper

在我看来,我按如下方式使用

<% unless event_reminder_set?(current_or_guest_user, event) %>
    REMIND ME
<% else %>
    REMINDER SET
<% end %>

这应该与其他模型协会一起使用,这种协会与加入模型的多对多关系,例如FavoriteRecipe