Rails с использованием вложенного пути - PullRequest
1 голос
/ 04 декабря 2010

У меня есть следующее:

<% = project_attachment_path (attachment.project, attachment)%>

Это выводит: /projects/70/attachments/25

<% = attachment.download_url%>

Это выводит: /attachments/25/original.jpg?1291407855

То, что я хочу, это: /projects/70/attachments/25?original.jpg?1291407855

Я пробовал это: <%= project_attachment_path(attachment.project, attachment.download_url) %>

Но что за ошибки? Есть ли способ заставить вышеуказанное работать?

Спасибо

ОБНОВЛЕНИЕ методом Download_url

class Attachment < ActiveRecord::Base
  def download_url(style = nil, include_updated_timestamp = true)
    url = Paperclip::Interpolations.interpolate('/:class/:id/:style.:extension', attachment, style || attachment.default_style)
    include_updated_timestamp && attachment.updated_at ? [url, attachment.updated_at].compact.join(url.include?("?") ? "&" : "?") : url
  end

МАРШРУТЫ:

resources :projects do
# Download Attachment
get "attachments/:id/:style.:format" => "attachments#download", :as => :attachment
end

resources :attachments do
 collection do
  get 'download', :as => :download
 end
end

Рейк-маршруты:

project_attachment GET    /projects/:project_id/attachments/:id/:style.:format         {:action=>"download", :controller=>"attachments"}

Ответы [ 2 ]

1 голос
/ 04 декабря 2010

ОК: когда вы используете это ... url = Paperclip :: Interpolations.interpolate ('/: class /: id /: style.: extension', вложение, стиль || attachment.default_style)

Часть '/:class/:id/:style.:extension' - это то, что создает ваш ошибочный URL: /attachments/25/original.jpg?1291407855

Я не уверен, точно лучший способ добавить часть "projects / project_id" в ваш URL, но вам нужно сделать что-то вроде этого:

class Attachment < ActiveRecord::Base
  def download_url(style = nil, include_updated_timestamp = true)

    project_id = self.project.id.to_s

    attachment_url = Paperclip::Interpolations.interpolate('/:class/:id/:style.:extension', attachment, style || attachment.default_style)
    include_updated_timestamp && attachment.updated_at ? [url, attachment.updated_at].compact.join(url.include?("?") ? "&" : "?") : url

    url = 'projects/' + project_id + attachment_url
  end

Может быть, есть более элегантный способ сделать это, но я думаю, что это должно привести вас на правильный путь. Надеюсь, это поможет!

0 голосов
/ 04 декабря 2010

Вы можете проверить все доступные пути с помощью:

rake routes
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...