我有三个模型:Stockholder
和Folder
;每个Stock
has_many Stockholders
,每个Stockholder
has_one :folder
。 Folder
记录在Stockholder
模型中创建,如此。
before_create :build_default_folder
private
def build_default_folder
logger.debug "The debug #{self.holder_index}"
build_folder(name: "#{self.holder_index}. #{self.holder_name}", company_id: self.stock.company.id, parent_id: self.stock.company.folders.find_by_name("#{self.stock.security_series} #{self.stock.security_class} Stocks").id)
true
end
在提交输入股东信息的表格后,我想重定向到刚刚创建的文件夹。我试图通过以下重定向来实现这一目的:
@stockholder=Stockholder.find(params[:id])
if @stockholder.update(stockholder_params)
redirect_to company_browse_path(@stockholder.stock.company, @stockholder.folder.id)
end
然而,这会导致以下错误:
Undefined method `id' for nil:NilClass
但是,如果文件夹已经存在并且我只是编辑股东,则没有问题。这使我相信没有及时创建文件夹,以便控制器能够将其用作重定向中的参数。我该如何解决这个问题?
答案 0 :(得分:0)
我不知道你到底想要做什么,但看起来有些东西不见了。首先,您需要将Folder
与Stockholder
相关联,接下来就是需要保存Folder
。我不知道build_folder
做了什么,因为我以前从未见过,但这里对我有用:
before_create :build_default_folder
private
def build_default_folder
folder = Folder.new(stockholder_id: self.id, name: "a name")
folder.save
end
答案 1 :(得分:0)
想出来,必须按如下方式输入重定向:
redirect_to company_browse_path(@stockholder.stock.company, Folder.find_by(stockholder: @stockholder))