Rails: встраивание и извлечение массива из формы - PullRequest
0 голосов
/ 29 июля 2011

Я запутался в синтаксисе Ruby, Rails и HTML. Надеясь, что некоторые Rails-ниндзя могут помочь мне с тем, что может быть тривиальной проблемой ...

Пост has_many Фотографии

На фотографии есть строка :image Атрибут

В Посте _form.html.haml Я хотел бы встроить (в hidden_field) содержимое атрибута image для каждой Фотографии, связанной с Постом ... и затем вернуть ее обратно, когда форма отправлена. Я мог бы сделать это либо A) добавив one hidden_field для каждого photo.image или B) создать отдельный массив , содержащий все связанные photo.image с.

Я озадачен тем, как лучше всего встраивать это ... (A) или (B), ни то, ни другое я полностью не усовершенствовал.

# _form.html.haml:
  = form_for @post do |f|

    - if @post.photos.any?
      - @post.photos.each do |photo|        -# (A)
        = f.hidden_field :image_cache       -# (A)
      = f.hidden_field :images_cache        -# (B)
    = f.file_field :photos, :multiple => true

  .actions
    = f.submit 'Save'


#post.rb  (A)
  def image_cache
    self.photos.any? ? photos.first.image : nil   -# works with `first` 
                                                  -# but not sure how to 
                                                  -# pass id of others?!?
  end


#post.rb:  (B)
  def images_cache
    photos.map { |i| i.image }
  end

Проблема с (A) в том, что я не знаю, как передать photo обратно в модель Post, чтобы вернуть из нее атрибут image_cache?!? f.hidden_field :image_cache(photo) не работает

Проблема с (B) состоит в том, что images_cache, возвращаемый моделью Post, представляет собой массив, но после встраивания в HTML-страницу и возврата в следующем запросе post он становится строковым представлением массива: [/uploads/tmp/20110729-1216-15902-2013/Before_Green_Flash.JPG, /uploads/tmp/20110729-1216-15902-5934/Before_Green_Flash2.JPG] и, следовательно, не отвечает на each.

Любая помощь в одной или обеих ситуациях будет принята с благодарностью!

1 Ответ

0 голосов
/ 01 октября 2011

Для подхода а почему бы и нет: = f.hidden_field photo.image

...