вставка скрепки драгоценного камня - PullRequest
1 голос
/ 04 февраля 2012

Добрый день.
У меня есть рельсы 3.1. и жемчужина скрепки
в моем приложении для управления контрактами компаний:

MODEL    
    model/contract.rb
      has_many :contract_files

    model/contract_file.rb
      has_attached_file :data

CONSOLE
Loading development environment (Rails 3.1.0)

1.9.2p290 :001 > cont = Contract.first

  Contract Load (0.1ms)  SELECT "contracts".* FROM "contracts" LIMIT 1    
         => #Contract id: 1, organization: "Com.org", and etc ....

1.9.2p290 :002 > cont.contract_files

  ContractFile Load (0.2ms)  SELECT "contract_files".* FROM "contract_files"
     WHERE "contract_files"."contract_id" = 1     
         => #[ContractFile id: 88, caption: "asdf", and etc ...]

ВОПРОС
Будь добр, скажи мне, пожалуйста, как мне извлечь Номер контракта: 1 в

model/contract_files.rb    
      has_attached_file :data,
      :url => "/assets/paperclip/:contract_id/:filename"

ПРИМЕР ЧТО Я ХОЧУ ПОЛУЧИТЬ
На http // localhost: 3000 / contract / 1 получаем такие файлы pathes: HTTP // локальный: 3000 / контрактов / 1 / активы / скрепка / 1 / XXX.pdf HTTP // локальный: 3000 / контрактов / 1 / активы / скрепка / 1 / XXY.pdf HTTP // локальный: 3000 / контрактов / 1 / активы / скрепка / 1 / XXZ.pdf

Большое спасибо за помощь.

1 Ответ

1 голос
/ 04 февраля 2012

Если я понял, вы могли бы сделать это следующим образом:

Contract.find( params[:id] ).contract_files.map { |cf| cf.data.url }
# Dont't forget to handle nonexistent id

Upd

Чтобы поместить contract_id в URL, вы должны восстановить параметры paperclip: url и: path следующим образом:

#model/contract_file.rb
has_attached_file :data, :path => "public/contracts/:parent_id/assets/paperclip/:id.:extension", :url => "/contracts/:parent_id/assets/paperclip/:id.:extension"

Paperclip.interpolates :parent_id do |a, s|
    a.instance.contract.id
end
...