Я запутался в синтаксисе 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
.
Любая помощь в одной или обеих ситуациях будет принята с благодарностью!