Ruby on rails 未定义的方法';通过可定位的id查找';rails活动

Ruby on rails 未定义的方法';通过可定位的id查找';rails活动,ruby-on-rails,android-activity,destroy,Ruby On Rails,Android Activity,Destroy,我已经创建了一个活动模型,我正在尝试使用它,这样当用户删除他们的活动时,它也会删除相应的状态。我可以在删除状态时执行此操作,它会删除活动,但不确定如何以相反的方向执行此操作。我尝试通过targetable_id查找状态,但我得到: undefined method `find_by_targetable_id' for #<Class:0x8df4a70> Parameters: {"_method"=>"delete", "authenticity_token"=>

我已经创建了一个活动模型,我正在尝试使用它,这样当用户删除他们的活动时,它也会删除相应的状态。我可以在删除状态时执行此操作,它会删除活动,但不确定如何以相反的方向执行此操作。我尝试通过targetable_id查找状态,但我得到:

undefined method `find_by_targetable_id' for #<Class:0x8df4a70>

Parameters:

{"_method"=>"delete",
 "authenticity_token"=>"s2wKOZxCBVarT5uge3AIFNXHepFuvNGM+kU/q+ArOjA=",
 "id"=>"18"}
的未定义方法“按\u targetable\u id查找\u”#
参数:
{u方法=>“删除”,
“真实性令牌”=>“s2wKOZxCBVarT5uge3AIFNXHepFuvNGM+kU/q+ArOjA=”,
“id”=>“18”}
如果您熟悉public_activity gem,那么targetable与trackable是相同的,在本例中,activity id是18,其对应的status id是53

活动控制器

class ActivitiesController < ApplicationController

  before_filter :authenticate_member!, only: [:destroy]
  before_filter :find_activity, only: [:destroy]

  def index
    following_ids = current_member.following_members.map(&:id)
    @activities = Activity.where("member_id in (?)", following_ids.push(current_member.id)).order("created_at desc").all
  end

  def destroy
    @status = Activity.targetable 
        if @status      
            @status.destroy
        end
    @activity.destroy

    respond_to do |format|
      format.html { redirect_to :back }
      format.json { head :no_content }
    end
  end

  private

  def find_activity
    @activity = current_member.activities.find(params[:id])
  end 

end
class StatusesController < ApplicationController

  before_filter :authenticate_member!, only: [:new, :create, :edit, :update, :destroy] 
  before_filter :find_member
  before_filter :find_status, only: [:edit, :update, :destroy, :show]

  rescue_from ActiveRecord::RecordNotFound do
    render file: 'public/404', status: 404, formats: [:html]
  end


  # GET /statuses
  # GET /statuses.json
  def index
    @statuses = Status.order('created_at desc').all

    respond_to do |format|
      format.html # index.html.erb
      format.json { render json: @statuses }
    end
  end

  # GET /statuses/1
  # GET /statuses/1.json
  def show

    respond_to do |format|
      format.html # show.html.erb
      format.json { redirect_to profile_path(current_member) }
    end
  end

  # GET /statuses/new
  # GET /statuses/new.json
  def new
    @status = Status.new
    @status.build_document

    respond_to do |format|
      format.html # new.html.erb
      format.json { render json: @status }
    end
  end

  # GET /statuses/1/edit
  def edit

  end

  # POST /statuses
  # POST /statuses.json
  def create
    @status = current_member.statuses.new(params[:status])

    respond_to do |format|
      if @status.save
        current_member.create_activity(@status, 'created')
        format.html { redirect_to :back }
        format.json 
      else
        format.html { redirect_to profile_path(current_member), alert: 'Post wasn\'t created. Please try again and ensure image attchments are under 10Mbs.'  }
        format.json { render json: @status.errors, status: :unprocessable_entity }
      end
    end
  end

  # PUT /statuses/1
  # PUT /statuses/1.json
  def update

    if params[:status] && params[:status].has_key?(:user_id)
        params[:status].delete(:user_id) 
    end 
    respond_to do |format|
      if @status.update_attributes(params[:status])
        format.html { redirect_to profile_path(current_member), notice: 'Status was successfully updated.' }
        format.json { head :no_content }
      else
        format.html { render action: "edit" }
        format.json { render json: @status.errors, status: :unprocessable_entity }
      end
    end
  end

  # DELETE /statuses/1
  # DELETE /statuses/1.json
  def destroy
    @activity = Activity.find_by_targetable_id(params[:id])
    if @activity
      @activity.destroy
    end 
    @status.destroy

    respond_to do |format|
      format.html { redirect_to :back }
      format.json { head :no_content }
    end
  end

  private
  def find_member
    @member = Member.find_by_user_name(params[:user_name])
  end 

  def find_status
    @status = current_member.statuses.find(params[:id])
  end 

  def sortable_date
    created_at
  end 

end
类活动控制器
状态控制器

class ActivitiesController < ApplicationController

  before_filter :authenticate_member!, only: [:destroy]
  before_filter :find_activity, only: [:destroy]

  def index
    following_ids = current_member.following_members.map(&:id)
    @activities = Activity.where("member_id in (?)", following_ids.push(current_member.id)).order("created_at desc").all
  end

  def destroy
    @status = Activity.targetable 
        if @status      
            @status.destroy
        end
    @activity.destroy

    respond_to do |format|
      format.html { redirect_to :back }
      format.json { head :no_content }
    end
  end

  private

  def find_activity
    @activity = current_member.activities.find(params[:id])
  end 

end
class StatusesController < ApplicationController

  before_filter :authenticate_member!, only: [:new, :create, :edit, :update, :destroy] 
  before_filter :find_member
  before_filter :find_status, only: [:edit, :update, :destroy, :show]

  rescue_from ActiveRecord::RecordNotFound do
    render file: 'public/404', status: 404, formats: [:html]
  end


  # GET /statuses
  # GET /statuses.json
  def index
    @statuses = Status.order('created_at desc').all

    respond_to do |format|
      format.html # index.html.erb
      format.json { render json: @statuses }
    end
  end

  # GET /statuses/1
  # GET /statuses/1.json
  def show

    respond_to do |format|
      format.html # show.html.erb
      format.json { redirect_to profile_path(current_member) }
    end
  end

  # GET /statuses/new
  # GET /statuses/new.json
  def new
    @status = Status.new
    @status.build_document

    respond_to do |format|
      format.html # new.html.erb
      format.json { render json: @status }
    end
  end

  # GET /statuses/1/edit
  def edit

  end

  # POST /statuses
  # POST /statuses.json
  def create
    @status = current_member.statuses.new(params[:status])

    respond_to do |format|
      if @status.save
        current_member.create_activity(@status, 'created')
        format.html { redirect_to :back }
        format.json 
      else
        format.html { redirect_to profile_path(current_member), alert: 'Post wasn\'t created. Please try again and ensure image attchments are under 10Mbs.'  }
        format.json { render json: @status.errors, status: :unprocessable_entity }
      end
    end
  end

  # PUT /statuses/1
  # PUT /statuses/1.json
  def update

    if params[:status] && params[:status].has_key?(:user_id)
        params[:status].delete(:user_id) 
    end 
    respond_to do |format|
      if @status.update_attributes(params[:status])
        format.html { redirect_to profile_path(current_member), notice: 'Status was successfully updated.' }
        format.json { head :no_content }
      else
        format.html { render action: "edit" }
        format.json { render json: @status.errors, status: :unprocessable_entity }
      end
    end
  end

  # DELETE /statuses/1
  # DELETE /statuses/1.json
  def destroy
    @activity = Activity.find_by_targetable_id(params[:id])
    if @activity
      @activity.destroy
    end 
    @status.destroy

    respond_to do |format|
      format.html { redirect_to :back }
      format.json { head :no_content }
    end
  end

  private
  def find_member
    @member = Member.find_by_user_name(params[:user_name])
  end 

  def find_status
    @status = current_member.statuses.find(params[:id])
  end 

  def sortable_date
    created_at
  end 

end
class StatusesController
不应使用此行

@status = Activity.targetable

?


第二个注意事项:在销毁
回调之前,最好将状态销毁移动到
Activity
model

是的,我刚刚注意到这一点并修复了它。谢谢。事实上,如果targetable_类型为“status”,我如何使其仅被调用?