Таким образом, непосредственная проблема заключается в том, что параметры запроса (т.е. params[:crop_geometry]
) не доступны для вашей модели, только для вашего контроллера + представлений.
В некоторых случаях (хотя это никогда не бывает хорошей идеей) вы можете обойти это правило MVC, передав параметры в вашу модель в качестве аргумента для метода:
class FoosController < ApplicationController
def action
Foo.some_method(params)
end
end
class Foo < ActiveRecord::Base
some_method(params)
puts params[:crop_geometry]
end
end
Вместо этогоЯ бы рекомендовал передать эту информацию параметров в переменную экземпляра, определенную в модели, и поместить условную логику в пользовательский метод установки, например, так:
class Asset < ActiveRecord::Base
attr_reader :crop_geometry
def crop_geometry=(crop_type)
if crop_type == "bottom"
crop_string = "-crop 200x100+0+100 -scale 100x100"
elsif crop_type == "top"
crop_geometry_thumb = "-crop 200x100+0+0 -scale 100x100"
elsif crop_type == "left"
crop_geometry_thumb = "-crop 100x200+0+100 -scale 100x100"
elsif crop_type == "right"
crop_geometry_thumb = "-crop 100x200+100+0 -scale 100x100"
else
crop_geometry_thumb = "-scale 100x100"
end
@crop_geometry = crop_geometry_thumb
end
end
Обратите внимание, что вам придется изменить свою формутак что он присваивает params [: asset] [: crop_geometry] «top», «bottom» или что-то еще.
Теперь, чтобы динамически установить crop_geometry, вам нужно будет использовать лямбду в конфигурации has_attached_file - таким образом, она будет оцениваться при каждом доступе к конфигурации, а не только при начальной загрузке модели.,Вот, пожалуйста:
has_attached_file :asset, :styles => lambda {|attachment|
:large => ['700x700', :jpg],
:medium => ['300x300>', :jpg],
:thumb => ["200x200>", :jpg]},
:convert_options => {:thumb => attachment.instance.crop_geometry},
:path => ":id/:style/:filename",
...
}
Получил последнюю часть из https://github.com/thoughtbot/paperclip (ищите «Динамическая конфигурация»).