在父父模型中创建后,重定向到子记录

时间:2016-05-18 23:29:33

标签: ruby-on-rails ruby-on-rails-4 redirect activerecord model

我有三个模型:StockholderFolder;每个Stock has_many Stockholders,每个Stockholder has_one :folderFolder记录在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

但是,如果文件夹已经存在并且我只是编辑股东,则没有问题。这使我相信没有及时创建文件夹,以便控制器能够将其用作重定向中的参数。我该如何解决这个问题?

2 个答案:

答案 0 :(得分:0)

我不知道你到底想要做什么,但看起来有些东西不见了。首先,您需要将FolderStockholder相关联,接下来就是需要保存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))