Ruby on Rails:如何建模“用户最喜欢的模型”

时间:2011-08-11 05:00:34

标签: ruby-on-rails rails-models

我将使用StackOverflow作为我的示例。假设我有Question模型。登录用户可以“标记”Question以标记为他们的最爱之一。在数据库中,这种事情可能存储在UserQuestions表中,其中包含user_id字段和question_id字段。这种功能不是典型的CRUD,因为实际上只有“list”,“add”和“delete”。此外,“用户加星标的问题”列表中显示的记录不应是UserQuestion条记录,而应是Question条记录。我在控制器和UserQuestion模型中放了什么代码?

class MyFavoriteQuestionsController < ApplicationController

  def index
    #list just the questions associated with current_user
  end

  def add
    #insert a row in the database for current_user and selected question
  def

  def remove
    #remove the row from the database
  end
end

1 个答案:

答案 0 :(得分:7)

如果你坚持惯例,我会说这是典型的问题。添加是创建,删除是销毁。

class FavouritesController < ApplicationController

  before_filter :find_user

  def index
    @favourites = @user.favourites
  end

  def create
    @question = Question.find params[:id]
    @user.favourites << @question
  def

  def destroy
    @favourite = @user.favourites.find_by_question_id params[:id]
    @favourite.destroy unless @favourite.blank?
  end
end


#routes.rb

resources :users do
  resources :favourites, :only => [:index, :create, :destroy]
end

#user.rb

has_many :user_favourites, :dependent => :destroy
has_many :favourites, :through => :user_favourites, :source => :question