Как я могу включить эту полиморфную модель во вложенную форму, которая также создает has_many через ассоциации? - PullRequest
0 голосов
/ 25 декабря 2011

У меня есть модель Post, в которой много Post_Images (полиморфных как: imageable). Я пытаюсь создать вложенную форму, в которой можно создавать сообщения, в том числе Post_Images, при одновременном назначении сообщения группам (есть групповая модель, в которой имеются сообщения:

Модели:

Почтовая модель

class Post < ActiveRecord::Base
  #   attr_accessible :name, :borrow, :price, :description, :user_id, :product_category_id, :post_image_ids, :group_ids, :post_images_attributes, :post_image
  has_many :post_images, :as => :imageable, :dependent => :destroy
  accepts_nested_attributes_for :post_images, :reject_if => lambda { |t| t[:post_image].nil?}, :allow_destroy => true
.
.
.
end

Модель PostImage (должна быть только Image, но я сделал это только что и не могу ее изменить):

class PostImage < ActiveRecord::Base
  # attr_accessible :imageable_id, :imageable_type, :post_image_ids
  belongs_to :imageable, :polymorphic => true
  has_attached_file :image, :styles => { :small => "150x150>", :large => "320x240>" }
  validates_attachment_presence :image
  validates_attachment_size :image, :less_than => 5.megabytes

end

PostsController

def new
    @user = User.find(params[:user_id])
    @post = @user.posts.build
    @assigment = Assignment.new
    #allow up to 5 images to be uploaded
    #5.times {@post.build_post_image}
    post_image = @post.post_images.build
    respond_to do |format|
      format.html # new.html.erb
      format.xml  { render :xml => @post }
    end
  end
  def create
    @user = User.find(params[:user_id])
    params[:post][:group_ids] ||= []
    @post = @user.posts.build(params[:post])

    if @post.save
      redirect_to @user
    else
      redirect_to new_user_post_path(current_user)
    end
  end

Разрушенная форма: (создает посты, а также добавляет их в группы)

=nested_form_for( [@user, @post], :remote => true) do |f|
    =hidden_field_tag 'user_id', @user.id
    =f.fields_for :post_images
    =f.link_to_add "Add an image", :post_images
    =f.label :name
    =f.text_field :name
    =f.label :borrow, "borrow?"
    =f.check_box :borrow
    =f.label :price
    =f.text_field :price        
    =f.label :description
    =f.text_area :description
    %h2 choose which groups you want to post this item to    
    -@user.groups_as_owner.each do |group|
        = label_tag "group_checkbox_#{group.id}", group.name
        = check_box_tag("post[group_ids]", group.id, @user.groups_as_owner.include?(group), :id => "group_checkbox_#{group.id}")
    -@user.groups_as_member.each do |group|
        = label_tag "group_checkbox_#{group.id}", group.name
        = check_box_tag("post[group_ids]", group.id, @user.groups_as_member.include?(group), :id => "group_checkbox_#{group.id}")
    .action=f.submit "Save Post"

_post_image_fields частично

=f.label :post_image, "Image"
%br
=f.file_field :post_image
=f.link_to_remove "remove"

Я прокомментировал attr_accessible, потому что я получал WARNING: Can't mass-assign protected attributes, и в поисках решения этой проблемы я столкнулся с кучей ресурсов, включая:

вложенная форма с полиморфными моделями

google group convo с предупреждением о массовом назначении

вложенные рельсы 2

Насколько мне известно, никто из них не решал мою проблему. Может быть, это из-за дополнительного аспекта, который у меня есть в форме - создание групповых заданий? Хотя мне кажется, что это проблема Param. Потому что я дошел до того, что форма будет работать ... с большим количеством attr_accessible, но будет сказано, что он не может массово назначить :post_image, который я сделал доступным в PostImages и Posts ... поэтому я не был уверен, в чем проблема с этим.

наконец, ответ в этом посте? (Я не совсем понимаю): ActiveRecord, has_many: through и полиморфные ассоциации

Дайте мне знать, если я должен предоставить больше информации, как-нибудь прояснить это. С праздником всех!

...