link_to循环中未保存的关联导致路径错误

时间:2013-12-08 22:22:36

标签: ruby-on-rails ruby-on-rails-4

我在每个循环中都有一个link_to。正在循环的对象确实包含新记录(有时)。父对象是book,嵌套对象是photo

- @book.photos.each do |photo|
  = link_to image_tag(photo.pic.url), edit_book_photo_path(@book)

错误是可以预测的:

No route matches {:action=>"edit", :controller=>"photos", :id=>nil, :book_id=>147, :format=>nil} missing required keys: [:id]

我尝试使用以下方法检查new_record:

- @book.photos.each do |photo|
  = link_to image_tag(photo.pic.url), edit_book_photo_path(@book) unless photo.new_record?

- @book.photos.each do |photo|
  - unless photo.new_record?
    = link_to image_tag(photo.pic.url), edit_book_photo_path(@book) 

但是得到同样的错误。

除非我没有做link_to,否则工作正常,例如我创建了一个列表

%ul
  - @book.photos.each do |photo|
    - unless photo.new_record?
      %li= "This is id #{photo.id}"

我看到有正确数量的子对象并删除了除非给我一个额外的没有id。

所以,显然我让这个过于复杂,因为它应该很简单,或者我误入歧途。目标:::在@book.photos.pic表单上呈现图片列表(book),每个图片都是编辑photo记录的链接。

建议?

2 个答案:

答案 0 :(得分:1)

尝试添加图片ID:

- @book.photos.each do |photo|
  = link_to image_tag(photo.pic.url), edit_book_photo_path(@book, photo)

答案 1 :(得分:1)

- @book.photos.select(&:persisted?).each do |photo|
  = link_to image_tag(photo.pic.url), edit_book_photo_path(@book, photo)