Ruby on rails 无法使用多态关联删除收藏夹用户
使用下面的系统,用户能够以以下格式喜爱样式:Ruby on rails 无法使用多态关联删除收藏夹用户,ruby-on-rails,Ruby On Rails,使用下面的系统,用户能够以以下格式喜爱样式: => #<Favorite id: 59, user_id: 2, favoritable_id: 15, favoritable_type: "Style", created_at: "2013-04-06 08:47:08", updated_at: "2013-04-06 08:47:08"> 问题在上面。详情如下 最喜欢的课程: class Favorite < ActiveRecord::Base bel
=> #<Favorite id: 59, user_id: 2, favoritable_id: 15, favoritable_type: "Style", created_at: "2013-04-06 08:47:08", updated_at: "2013-04-06 08:47:08">
问题在上面。详情如下
最喜欢的课程:
class Favorite < ActiveRecord::Base
belongs_to :favoritable, :polymorphic => true
belongs_to :user
attr_accessible :user
validates_presence_of :user
validates_uniqueness_of :user_id, :scope => [:favoritable_type, :favoritable_id]
end
class收藏夹true
属于:用户
属性可访问:用户
验证用户是否存在
验证:user\u id,:scope=>[:favoritable\u type,:favoritable\u id]的唯一性
结束
模型定义,包括有利模块(见下文):
class用户
有利模块:
module Favoritable
extend ActiveSupport::Concern
included do
attr_accessible :favorites
has_many :favorites, :as => :favoritable, :autosave => true
accepts_nested_attributes_for :favorites
def add_favorite(user)
self.favorites << Favorite.create!(:user => user)
save
end
def delete_favorite(user)
self.favorites.where(:user_id => user.id).each do |favorite|
favorite.destroy
end
end
end
end
modulefavoritable
扩展ActiveSupport::关注点
包括做
可访问属性:收藏夹
有多个:收藏夹,:as=>:favoritable,:autosave=>true
接受\u嵌套的\u属性\u用于:收藏夹
def添加_收藏夹(用户)
self.favorites(用户)
拯救
结束
def delete_收藏夹(用户)
self.favorites.where(:user_id=>user.id)。每个do | favorite|
最爱,毁灭
结束
结束
结束
结束
收藏夹控制器:
class FavoritesController < ApplicationController
def fav_user
@user = User.find(params[:id])
@user.add_favorite(current_user)
respond_to do |format|
format.js { render :action => "update_favorite_disp", :layout => false }
end
end
def delete_fav_user
@user = User.find(params[:id])
respond_to do |format|
if @user.delete_favorite(current_user)
format.js { render :action => "update_favorite_disp", :layout => false }
end
end
end
def fav_style
@style = Style.find(params[:id])
@style.add_favorite(current_user)
respond_to do |format|
format.js { render :action => "update_favorite", :layout => false }
end
end
def delete_fav_style
@style = Style.find(params[:id])
respond_to do |format|
if @style.delete_favorite(current_user)
format.js { render :action => "update_favorite", :layout => false }
end
end
end
end
class-FavoritesController“update\u favorite\u disp”,:layout=>false}
结束
结束
def delete_fav_用户
@user=user.find(参数[:id])
回应待办事项|格式|
如果@user.delete_favorite(当前_用户)
format.js{render:action=>“update\u favorite\u disp”,:layout=>false}
结束
结束
结束
def fav_风格
@style=style.find(参数[:id])
@样式。添加\u收藏夹(当前用户)
回应待办事项|格式|
format.js{render:action=>update\u favorite',:layout=>false}
结束
结束
def delete_fav_样式
@style=style.find(参数[:id])
回应待办事项|格式|
如果@style.delete\u收藏夹(当前用户)
format.js{render:action=>update\u favorite',:layout=>false}
结束
结束
结束
结束
您需要在add\u favorite
中输入:favoritable模型:
def add_favorite(user)
Favorite.create!(:user =>user, :favoritable => self)
save
delete\u favorite
还需要根据:favoritable\u id
而不是:user\u id
进行删除:
def delete_favorite(user)
user.favorites.where(:favoritable_id => self.id).each do |favorite|
favorite.destroy
end
end
您需要在
add\u favorite
中传入:favoritable模型:
def add_favorite(user)
Favorite.create!(:user =>user, :favoritable => self)
save
delete\u favorite
还需要根据:favoritable\u id
而不是:user\u id
进行删除:
def delete_favorite(user)
user.favorites.where(:favoritable_id => self.id).each do |favorite|
favorite.destroy
end
end