Radovan Šmitala
2012-Aug-22 17:33 UTC
Delegated attribute are set and saved from console, but not from front-end
i do some refactoring for my models and want to use "magic" of *delegate* in my models. Have models: class Asset < ActiveRecord::Base has_many :attachments, inverse_of: :asset attr_accessible :file end which have file attribute. For example needs is file only as string attribute. And Attachment, which is polymorphic and single table inherited. There is delegate method for file attribute to asset model. class Attachment < ActiveRecord::Base belongs_to :attachmentable, polymorphic: true, touch: true belongs_to :asset, inverse_of: :attachments, autosave: true attr_accessible :file attr_accessible :remove_file, :file_cache delegate :file, :file=, :file?, to: :asset, allow_nil: true after_initialize :build_asset_model def build_asset_model build_asset if self.asset.blank? end end These 2 models are used to store file and association to between other models. So for example we could have: class Category < ActiveRecord::Base has_one :image, as: :attachmentable, dependent: :destroy, autosave: true attr_accessible :name, :position attr_accessible :image_attributes accepts_nested_attributes_for :image, reject_if: :all_blank, allow_destroy: true end connected with class Category::Image < Attachment end When is is category with image created from console, it works: cc = Category.new cc.build_image cc.name = ''name'' cc.image.file = ''filename.jpg'' cc.save This works great! Category is created, attachment has polymorphic and STI information, asset is created and associated to attachment. But when is Category saved from front-end html form. It doesn''t work, and return me, that file attribute is blank. My form: = simple_nested_form_for @category, html: { class: "form-horizontal" } do |f| = render ''shared/error_messages'', object: @category legend= Category.model_name.human = f.input :name = f.simple_fields_for :image do |ima| = ima.input :file .form-actions = f.button :submit, :class => ''btn-primary'', data: { disable_with: t(''processing'') } '' = link_to t(''.cancel'', :default => t("helpers.links.cancel")), categories_path, :class => ''btn'' controller actions: (using CanCan is automaticaly initialized) def new # build location @category.build_image respond_with @category end def create @category.build_image unless @category.image @category.save respond_with @category end category params params[:category] => {"name"=>"name", "image_attributes"=>{"file"=>"filename.jpg"}} Some help please? Thank you so much. -- You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org To view this discussion on the web visit https://groups.google.com/d/msg/rubyonrails-talk/-/wkDMnjByiMIJ. For more options, visit https://groups.google.com/groups/opt_out.
Frederick Cheung
2012-Aug-24 11:32 UTC
Re: Delegated attribute are set and saved from console, but not from front-end
On Wednesday, August 22, 2012 6:33:56 PM UTC+1, Radovan Šmitala wrote:> > But when is Category saved from front-end html form. It doesn''t work, and > return me, that file attribute is blank. My form: > > = simple_nested_form_for @category, html: { class: "form-horizontal" } do |f| > = render ''shared/error_messages'', object: @category > > Is your form being set to multipart ? File uploads won''t work without that.Fred -- You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe@googlegroups.com. To view this discussion on the web visit https://groups.google.com/d/msg/rubyonrails-talk/-/iv6gAJEJoOIJ. For more options, visit https://groups.google.com/groups/opt_out.