Почему Ruby on Rails добавляет пустой объект, когда используются has_many и assign_to? - PullRequest
1 голос
/ 16 марта 2011

Эй, я пишу сайт, похожий на 4chan. У меня есть две модели: Board и Picture. A Board имеет много Picture s:

class Board < ActiveRecord::Base

  # Relationships
  has_many :pictures, :dependent => :destroy

end
class Picture < ActiveRecord::Base

  # Relationships
  belongs_to :board

end

Я делаю это, на мой взгляд boards/show.html.haml:

- if @board.pictures.any?
  - @board.pictures.each do |picture|
    %article.picture-article{ :id => "picture-#{picture.id}" }
      - if picture.title?
        %header
          %h2= picture.title
      %img{ :src => picture.pic.url, :alt => (picture.title? ? picture.title : 'untitled pic') }/
      %pre~ picture.description
- else
  meh this board is still empty

А в моем милом BoardsController:

def show
  @board = Board.find_by_short_name params[:id]
end

Проблема в том, что всегда отображается один Picture, который пуст. Например, у меня есть Board без Picture s в БД (проверил с помощью Picture.all), но это вывод:

<code><article class='picture-article' id='picture-'>
  <img alt='untitled pic' src='/pics/original/missing.png'>
  <pre>

Однако, когда я отображаю его как JSON, вывод будет без Picture s, как и должно быть:

{
  "board": {
    "name": "n00bs",
    "created_at": "2011-03-16T17:14:32Z",
    "updated_at": "2011-03-16T17:14:32Z",
    "id": 14,
    "short_name": "0",
    "pictures": [
    ]
  }
}

Я могу удалить это, просто удалив последний элемент массива перед выполнением each, но ошибка все еще остается, и это очень неуклюже. Как это может случиться? Почему @board.pictures всегда добавляет пустой Picture объект?

Ответы [ 2 ]

0 голосов
/ 16 марта 2011

Ха!

На мой взгляд, добавление .all сработало (и order также работает):

- @board.pictures.all.each do |picture|
0 голосов
/ 16 марта 2011

Попробуйте картинки. вместо .any?

...