2012-11-12 5 views
0

J'utilise relation polymorphes comme j'ai 3 modèles comme celui-ci:Rails emboîtées (simple_form_for) aide has_many belongs_to association

class Food < ActiveRecord::Base 
    has_many :images, as: :imageable, foreign_key: :imageable_uuid, dependent: :destroy 
    accepts_nested_attributes_for :images, :allow_destroy => true 
end 
class MenuPhoto < ActiveRecord::Base 
    has_one :image, as: :imageable, foreign_key: :imageable_uuid, dependent: :destroy 
    accepts_nested_attributes_for :image 
end 
class Image < ActiveRecord::Base 
    belongs_to :imageable, foreign_key: :imageable_uuid, :polymorphic => true 
end 

Donc, dans mon, je l'ai mis comme "sous forme de photos de menu" ceci:

= simple_form_for @menu_photo do |f| 
    = f.simple_fields_for :image_attributes do |d| 
     = d.input :photo, as: :file 
     = f.submit 

Quand je soumets cette forme, il me donne comme ceci:

{"menu_photo"=>{ 
    "image_attributes"=> 
     {"photo"=>"user image upload"} 
    } 
} 

il est exact. Donc, en "forme alimentaire" je fais la même chose:

= simple_form_for @food do |f| 
    = f.simple_fields_for :images_attributes do |d| 
     = d.input :photo, as: :file 
     = f.submit 

Ce que j'attends:

{"food"=>{ 
    "images_attributes"=>[ 
     {"photo"=>"user image upload one"}, 
     {"photo"=>"user image upload two"} 
    ]} 
} 

Ce que je suis:

{"food"=>{ 
    "images_attributes"=> 
     {"photo"=>"user image upload one"} 
    } 
} 

Cela me donne une erreur. Une solution à propos de celui-ci?

+0

que voulez-vous dire 'pareil''? il a la même erreur? Si c'est le cas, affichez votre modèle et votre contrôleur pour plus d'informations. – Thanh

+0

@KienThanh: C'est similaire. Je veux que "link_attributes" soit un tableau dans (has_many belongs_to association), mais à la place il me donne juste un simple hash (j'attends un tableau de hashes). c'est ce qui ne va pas. Oh, au fait, j'utilise une structure polymorphe. –

+0

Non, l'association 'has_many' et' belongs_to' peut donner autant de hachage que vous le souhaitez (en fait, un tableau de hachage, comme vous le souhaitez). Cochez cette [Méthode de classe] (http://api.rubyonrails.org/classes/ActiveRecord/NestedAttributes/ClassMethods.html). Exemple, vous voulez un aliment avec 2 photos, pourquoi vous obtenez une seule photo, parce que vous utilisez seulement 1 fois '@ food.photos.build', si vous en voulez plus, faites ceci:' n.times {@ food.photos .build} '. Vous pouvez voir ce [formulaire imbriqué] (http://railscasts.com/episodes/196-nested-model-form-part-1) pour plus d'informations. – Thanh

Répondre

0

Si vous avez défini has_many association:

has_many :images 

has_many association ajoutera quelques méthodes vous aider à construire et créer un objet:

collection.build(attributes = {}, …) 
collection.create(attributes = {}) 

collection ici est images. Vous pouvez en lire plus ici has_many

Et lorsque vous définissez has_one association:

has_one :image 

has_one association ajouterez quelques méthodes vous aider à construire et créer un objet:

build_association(attributes = {}) 
create_association(attributes = {}) 

create_association est ici image. Vous pouvez lire plus ici has_one. Ainsi, il vous sera possible de créer un nouvel objet associé à has_many et has_one.

+0

thx man, j'ai été d'une grande aide .. vraiment l'apprécier. –

Questions connexes