Ruby on rails 如何在使用ActiveRecord::Base方法进行查询时忽略该对象,这些方法的关联对象已从rails中的数据库中删除
我有一个人好的 这花了我几天时间,但在我周围的人的帮助下,我确实找到了大部分困惑和模糊的答案: 答复: 1:有一种方法可以软删除从正常查询中隐藏的数据含义。。。第一个问题的大部分含糊不清之处都可以从这个[链接][1]中找到答案。这将有助于软删除数据。是,可以访问软删除对象的属性,无需恢复日期;数据可以被完全删除,链接中的所有内容也可以被删除。为了获得这些好处,我需要在代码库中进行以下更改:- 这样访问的个人对象first_name=Person.with_delete.find15不会生成错误 注:我不知道还有什么原因。如果你能想出任何答案,请回答这部分 3:虽然我没有直接回答第3个问题,但从现在起,我可以访问消息发送者信息,即使它们在活动关系表单中被删除,所以排序和分页工作,但我当然想知道如果对象在非活动关系中,如何分页 所以,我最好这样回答这个问题:-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不会生成错误
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