Ruby on Rails: как моделировать «любимую модель пользователя» - PullRequest
3 голосов
/ 11 августа 2011

Я буду использовать StackOverflow в качестве примера.Допустим, у меня есть модель Question.Зарегистрированный пользователь может пометить Question, чтобы отметить, как один из его фаворитов.В базе данных такого рода вещи, вероятно, будут храниться в таблице UserQuestions с полем user_id и полем question_id.Этот тип функции не является типичным CRUD, поскольку на самом деле есть только «список», «добавить» и «удалить».Кроме того, записи, отображаемые в списке «Вопросы, отмеченные пользователем», должны быть не 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 Ответ

7 голосов
/ 11 августа 2011

Я бы сказал, что это типично, если вы придерживаетесь соглашения.Добавить - создать, удалить - уничтожить.

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
...