【发布时间】:2015-06-03 11:37:59
【问题描述】:
我的控制器中有这个还原方法
def revert
version = PaperTrail::Version.find(params[:id])
if version.reify
version.reify(:has_many=>true).save!
else
version.item.destroy
end
share_type = ShareType.find(params[:share_type_id])
redirect_to :back
end
我收到 nil:NilClass on 的未定义方法 `klass' 的错误
version.reify(:has_many=>true).save!
但是当我尝试时
version.reify.save!
一切都变好了我做错了什么我正在对另一个资源使用revert方法
def revert
version = PaperTrail::Version.find(params[:id])
if version.reify
version.reify(has_many: true).save!
else
version.item.destroy
end
company = Company.find_by_slug(params[:company_id])
redirect_to :back
end
这工作正常,没有任何错误。 这是我的两种资源的模型
class ShareType < ActiveRecord::Base
has_paper_trail
belongs_to :company
has_many :issue_shares, dependent: :destroy
has_many :users, through: :shares
validates :company, :code, :name, :reason, :effective_date, presence: true
before_save :convert_new_line_to_html
def convert_new_line_to_html
self.description.to_s.gsub!(/\r\n?/, "<br>")
end
end
对于公司
class Company < ActiveRecord::Base
extend FriendlyId
friendly_id :slug_candidates, use: :slugged
has_many :user_companies, dependent: :destroy
has_many :users, through: :user_companies
has_many :advisor_invitations
has_many :company_advisors
has_many :advisors, through: :company_advisors
belongs_to :created_by, class_name: "User", foreign_key: "user_id"
has_many :share_types, dependent: :destroy
validates :user_id, :name,:company_no,:company_type,:registered_office, :principle_place, presence: true
validates_uniqueness_of :name, :company_no
validates_presence_of :register_address_occupier, :if => lambda { |o| !o.occupied_by_company }
has_paper_trail
def slug_candidates
[
:name,
[:name, :company_type],
[:name, :company_type, :company_no],
]
end
def should_generate_new_friendly_id?
slug.blank? || name_changed?
end
def is_admin?(user)
!user_companies.where("user_id=? AND role=?",user.id, 0).empty?
end
def share_holder?(user)
shares = Share.includes(issue_share:[:share_type]).where("share_types.company_id=? AND shares.user_id=?", id, user.id).references(:share_types)
!shares.empty?
end
def is_director?(user)
!user_companies.where("user_id=? AND role=?",user.id, 1).empty?
end
def is_advisor?(user)
!advisors.where("user_id=?",user.id).empty?
end
end
【问题讨论】:
-
请始终发布整个堆栈跟踪!
标签: ruby ruby-on-rails-4 rubygems paper-trail-gem