Stałe w mojej aplikacji

Cześć, w mojej aplikacji będzie kilka stałych, np. ścieżka do grafik (katalog), które będą wyświetlane na stronach. Gdzie takie stałe powinno się przechowywać? Tak, żeby w przyszłości przenosząc aplikację podmienić tylko kilka tych stałych i żeby wszystko działało :slight_smile:

config/environments? Tylko nie wiem jak się dostać z views do zdefiniowanego:

config.img_src_base   = "public/images/hash/"

I przy okazji - czy da się przy scaffold zdefiniować typ pola jako obraz, tak żeby wygenerowane formularze zawierały pola typu file do uploadu?

Obecnie już prawie nikt nie pisze własnej obsługi uploadu zdjęć czy innych plików (chyba że ma bardzo specyficzne wymagania) ponieważ istnieje plugin do tego

Co do stałych to z reguły umieszczam je w danym modelu np:

[code=ruby]class RemoteUpload < ActiveRecord::Base

PATH = ‘/v01’

end[/code]

OK, dzięki, czyli tworząc model przez scaffold, jeżei chce tam mieć zdjęcie, to jakiego typu użyć? product_picture:String? I później ręcznie podmieniać w edit/new odpowiednie pola?

paperclip railscast

Nie wszystko da się zrobić scaffoldem, w pewnym momencie trzeba zacząć kodować :slight_smile:

Paperclip super, dzięki.

A jak tutaj:

  has_attached_file :image, :styles => { :small => "100x100>", :medium => "250x250" },
                    :url  => "/imgs/jewelries/:id/:style/:basename.:extension",
                    :path => ":rails_root/public/imgs/jewelries/:id/:style/:basename.:extension"

zamiast :basename wstawić nazwę aktualnego rekordu (name), nie działają:
#{self.name}
#{name}
:name
name
self.name
:frowning:

Szukać tego w dokumentacji Paperclipa? Czy w podstawach obiektowości Ruby?

[quote=zmaliszewska]Paperclip super, dzięki.

A jak tutaj:
zamiast :basename wstawić nazwę aktualnego rekordu (name), nie działają:[/quote]
Witaj,
nie za bardzo rozumiem, co i gdzie chcesz wstawić?
Mogę się mylić, ale…

  has_attached_file :image, :styles => { :small => "100x100>", :medium => "250x250" },
                    :url  => "/imgs/jewelries/:id/:style/:basename.:extension",
                    :path => ":rails_root/public/imgs/jewelries/:id/:style/:basename.:extension"

da tobie np. /imgs/jewelries/5/small/naszyjnik.jpg dla @jewelry.image.url(:small)
a

  has_attached_file :image, :styles => { :small => "100x100>", :medium => "250x250" },
                    :url  => "/imgs/jewelries/:id/:style_:basename.:extension",
                    :path => ":rails_root/public/imgs/jewelries/:id/:style/:basename.:extension"

da tobie /imgs/jewelries/5/small_naszyjnik.jpg

pozdrawiam

edit: dopisanie zdania “mogę się mylić” :slight_smile:

@zmaliszewska: Jeśli bardzo chcesz żeby nazwa pliku została zastąpiona atrybutem :name model to możesz to zmienić dodając stosowną opcję do Paperclip::Attachment.interpolations (zajrzyj do vendor/plugins/paperclip/lib/paperclip/attachment.rb ) chociaż nie spotkałem się z przypadkiem, kiedy ktoś to zrobił. Tak z ciekawości: dlaczego :basename Ci nie odpowiada ?

Dzięki hosiawak - o to chodziło. Powody mam dwa:

  1. domyślam się, że może to nie mieć żadnego wpływu, ale jednak - SEO, nazwa produktu w nazwie pliku grafiki…
  2. mam swoją ogromną bazę produktów z innego serwisu, muszę przemigrować dane- struktury bardzo się różnią, jeżeli nazwy grafik będą miały taki format - będzie mi dużo łatwiej - bo mam te grafiki…

Przychodzi mi do głowy jeszcze pomysł optymalizacyjny, żeby skracać niepotrzebnie długie nazwy plików… jednak przy dzisiejszych łączach - może to być zaniedbywalne.

Jesli chodzi o SEO to w takim razie sprobuj dodac do config/environment.rb

Paperclip::Attachment.interpolations[:name] = lambda{|attachment,style| attachment.instance.name.gsub(/[^[:alnum:]]/,'_') }

i zamien :basename na :name