Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jquery-ui/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 无法使用多态关联删除收藏夹用户_Ruby On Rails - Fatal编程技术网

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