Ruby on rails Rails:嵌套模型:如何获取在父级控制器中刚刚创建的子级新记录

Ruby on rails Rails:嵌套模型:如何获取在父级控制器中刚刚创建的子级新记录,ruby-on-rails,Ruby On Rails,我的嵌套模型如下所示: class Album < ActiveRecord::Base has_many :photos accepts_nested_attributes_for :photos end class Photo < ActiveRecord::Base belongs_to :album end 使用此@album.photos.last,我只能获取与父级一起保存的照片的最后一条记录,假设最后一条记录是通过在创建操作之前保存一个步骤创建的。但这在更

我的嵌套模型如下所示:

class Album < ActiveRecord::Base
  has_many :photos
  accepts_nested_attributes_for :photos
end

class Photo < ActiveRecord::Base
  belongs_to :album
end
使用此@album.photos.last,我只能获取与父级一起保存的照片的最后一条记录,假设最后一条记录是通过在创建操作之前保存一个步骤创建的。但这在更新操作中不会有好处。。。我真正想要实现的是获取照片的记录,这些记录的数据以照片属性的形式存在于参数中,并将它们传递给@photos


如何实现这一点?

如果您只想获取在更新过程中更新的照片,可以执行以下操作:

def update
  respond_to do |format|
    @album = Album.find(params[:id])
    already_existing_photo_ids = @album.photos.pluck(:id)
    @album.update_attributes(album_params)
    @photos = @album.photos.where('id NOT IN (?)', already_existing_photo_ids)

    format.html
    format.js
  end
end
对于创建操作,只需使用与相册关联的所有照片:

def create
  respond_to do |format|
    @album = Album.new(album_params)
    @album.save
    @photos = @album.photos

    format.html
    format.js
  end
end

然后,您可以在@photos上循环,以显示创建/更新的每个照片

这些照片是否按应有的方式创建?如果是这样,如果存在关系,@photos=@album.photos应该可以工作。当然,你需要通过循环来显示它们。谢谢@MrYoshiji。但我知道,这不会选择在更新相册记录时创建的照片。考虑是否有一种方法可以像这样钩住SQL查询的结果:在照片中插入img_name、img_uid、author、attachable_type、attachable_id、created_at、updated_at值?、?、?、?、?、?、?、?、?你有什么想法吗?请忽略多态部分,您可以找到使用用于创建照片的参数创建的照片。如果您需要,我可以将其添加到我的答案中。在这种情况下,我可以使用唯一的img_uid,但我想知道保存/更新后立即获取所有已保存和更新记录的其他方法,或者至少在更新操作中仅获取已创建的记录。。。它在其他模型的控制器中也很有用,因为它在params中没有唯一的值……我用一个非常简单的解决方案更新了我的答案:在更新之前检索已经存在的照片,然后获取更新之前不存在的所有照片。它应该适用于任何类型的对象,并且不依赖于参数,这比我的第一个建议要好得多。这很好:>因此,我可以通过如下操作在更新操作中创建和更新记录:updated_photo_id=album_params[:photos_attributes].map{u124;,photo_attrs | photo_attrs[:id]}.compact-ready_-existed_-photo_-id=@album.photos.pulk:id-@updated_-photos=@album.photos.whereid:updated_-photo_-id-@created_-photos=@album.photos.where'id不在',ready_-existing_-photo_-id可以吗?
def create
  respond_to do |format|
    @album = Album.new(album_params)
    @album.save
    @photos = @album.photos

    format.html
    format.js
  end
end