Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/65.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 如何在使用ActiveRecord::Base方法进行查询时忽略该对象,这些方法的关联对象已从rails中的数据库中删除_Ruby On Rails_Activerecord_Pagination_Rails Activerecord - Fatal编程技术网

Ruby on rails 如何在使用ActiveRecord::Base方法进行查询时忽略该对象,这些方法的关联对象已从rails中的数据库中删除

Ruby on rails 如何在使用ActiveRecord::Base方法进行查询时忽略该对象,这些方法的关联对象已从rails中的数据库中删除,ruby-on-rails,activerecord,pagination,rails-activerecord,Ruby On Rails,Activerecord,Pagination,Rails Activerecord,我有一个人好的 这花了我几天时间,但在我周围的人的帮助下,我确实找到了大部分困惑和模糊的答案: 答复: 1:有一种方法可以软删除从正常查询中隐藏的数据含义。。。第一个问题的大部分含糊不清之处都可以从这个[链接][1]中找到答案。这将有助于软删除数据。是,可以访问软删除对象的属性,无需恢复日期;数据可以被完全删除,链接中的所有内容也可以被删除。为了获得这些好处,我需要在代码库中进行以下更改:- 这样访问的个人对象first_name=Person.with_delete.find15不会生成错误

我有一个人好的

这花了我几天时间,但在我周围的人的帮助下,我确实找到了大部分困惑和模糊的答案:

答复: 1:有一种方法可以软删除从正常查询中隐藏的数据含义。。。第一个问题的大部分含糊不清之处都可以从这个[链接][1]中找到答案。这将有助于软删除数据。是,可以访问软删除对象的属性,无需恢复日期;数据可以被完全删除,链接中的所有内容也可以被删除。为了获得这些好处,我需要在代码库中进行以下更改:-

这样访问的个人对象first_name=Person.with_delete.find15不会生成错误

注:我不知道还有什么原因。如果你能想出任何答案,请回答这部分

3:虽然我没有直接回答第3个问题,但从现在起,我可以访问消息发送者信息,即使它们在活动关系表单中被删除,所以排序和分页工作,但我当然想知道如果对象在非活动关系中,如何分页

所以,我最好这样回答这个问题:-

def show_list

  # @messages = Array.new
  # @person = Array.new
  # messages_temp = Message.where(:receiver_id => current_user.id).
  #                       includes(:sender).order("updated_at DESC")

  # i = 0
  # messages_temp.each do |msg|
  #   if(!(msg.sender.nil?))
  #     @messages[i] = msg
  #     @person[i] = msg.sender
  #     i = i+1
  #   end
  # end

  # REPLACE ABOVE CODE BY THIS. THe following code will 
  # include deleted messages as well. 
  @person = Array.new
  @messages = Message.where(:receiver_id =>current_user.id).
                      includes(:sender_including_deleted).
                      order("created_at DESC").paginate(params).readonly

  i = 0
  @messages.each do |msg|       
    @person[i] = msg.sender_including_deleted(:with_deleted => true)
    i = i + 1
  end


end
我希望那些偶然发现这个问题的人得到他们想要的。如果他们没有得到我的答案或问题的任何部分,欢迎他们在这里发表评论,我将很高兴尽我所能回答

class Message < ActiveRecord::Base

  belongs_to :sender, :class_name => 'Person'
  belongs_to :receiver, :class_name => 'Person'

  # ......
end
@messages = Message.where(:receiver_id => current_user.id)
                   .includes(:sender).order("updated_at DESC")------------(1)
in application controller asset is undefined method or variable  ----------(2)
def respond_to_not_found(*types)
      flash[:warning] = t(:msg_asset_not_available, asset)
      respond_to do |format|
        format.html { redirect_to(redirection_url) }
        # ...
      end
end
def show_list
  @messages = Array.new
  @person = Array.new
  messages_temp = Message.where(:receiver_id => current_user.id).
                        includes(:sender).order("updated_at DESC")

  i = 0
  messages_temp.each do |msg|
    if(!(msg.sender.nil?))
      @messages[i] = msg
      @person[i] = msg.sender
      i = i+1
    end
  end
end
@messages = Message.<ActiveRecord::Base method to get the desired output>.paginate[params]  
class Person < ActiveRecord::Base
 # has_many :sent_messages, :class_name => 'Message', :inverse_of => :sender
 # has_many :received_messages, :class_name => 'Message', :inverse_of => :receiver 
 has_many :sent_messages, :class_name => 'Message', 
           :inverse_of => [:sender, :sender_including_deleted]
 has_many :received_messages, :class_name => 'Message', 
           :inverse_of => [:receiver, :receiver_including_deleted]


 #.....

end
class Message < ActiveRecord::Base

  belongs_to :sender, :class_name => 'Person'
  belongs_to :receiver, :class_name => 'Person'

  # Add these two lines:-
  belongs_to :sender_including_deleted, :class_name => 'Person', 
             :foreign_key => 'sender_id', :with_deleted => true
  belongs_to :receiver_including_deleted, :class_name => 'Person', 
             :foreign_key => 'receiver_id', :with_deleted => true 


  # ......
end
def show_list

  # @messages = Array.new
  # @person = Array.new
  # messages_temp = Message.where(:receiver_id => current_user.id).
  #                       includes(:sender).order("updated_at DESC")

  # i = 0
  # messages_temp.each do |msg|
  #   if(!(msg.sender.nil?))
  #     @messages[i] = msg
  #     @person[i] = msg.sender
  #     i = i+1
  #   end
  # end

  # REPLACE ABOVE CODE BY THIS. THe following code will 
  # include deleted messages as well. 
  @person = Array.new
  @messages = Message.where(:receiver_id =>current_user.id).
                      includes(:sender_including_deleted).
                      order("created_at DESC").paginate(params).readonly

  i = 0
  @messages.each do |msg|       
    @person[i] = msg.sender_including_deleted(:with_deleted => true)
    i = i + 1
  end


end