вложенные формы для 2 моделей в рельсах с использованием dm-accepts_nested_attributes и dm-is-tree - PullRequest
2 голосов
/ 21 декабря 2010

У меня есть две модели: Post и Image в приложении форума, где сообщения расположены в формате parent-child с использованием dm-is-tree. До этого момента изображения были частью модели Post. Поскольку модель Post становится громоздкой, и мне нужно добавить больше глубины, чтобы пометить изображение, я работаю над тем, чтобы выделить изображение в его собственную модель, но все еще остается частью сообщения в выводе.

Итак, я начал интегрировать dm-accepts_nested_attributes в простом порядке:

class Post
  include DataMapper::Resource

  property :id, Serial                                     
  property :istop, String                                   
  property :created_at, DateTime                            
  property :updated_at, DateTime                            
  property :content, Text                                   

  has n, :images                                           
  accepts_nested_attributes_for :images                    

  is :tree, :order => [:istop, :created_at]

class Image

  include DataMapper::Resource

  property :id, Serial
  property :created_at, DateTime

  belongs_to :post

  property :image, String, :auto_validation => false        # Carrierwave image info
  mount_uploader :image, ImageUploader                      # Carrierwave uploader

У меня есть эта форма (haml) на каждой странице для создания сообщения:

 = form_for [@forum,Post.new], :html => {:multipart => true} do |f|
  = f.hidden_field :istop, :value => "parent"
  = f.text_area :content
  = f.fields_for :simages_attributes do |g|
   = g.file_field :image
  .actions
   = f.submit

Что идет к этому контроллеру:

def create
    @forum = Forum.get(params[:forum_id])
    @post = @forum.posts.create(params[:post])

    respond_to do |format|
      if @post.save
        format.html { redirect_to(forum_path(@forum), :notice => 'Post was successfully created.') }
      else
        format.html { redirect_to(forum_path(@forum), :notice => 'There was an error in posting') }
      end
    end
  end

Ошибка, которую я получаю при публикации:

undefined method [] 'для # `

, NoMethodError

Я не уверен, что я делаю или откуда это происходит в данный момент. Я не уверен, правильно ли я настроил форму (я следовал аналогичным учебным пособиям по активной записи и еще не углублялся в код dm-accepts_nested). Я могу установить некоторые более простые вещи через командную строку, но не изображения. Я понимаю основы вложения, но не совсем понимаю, как интегрировать его в то, что я делаю.

Может, кто-то знает. Любая помощь приветствуется.

Ответы [ 2 ]

0 голосов
/ 22 декабря 2010

Ответ, полученный при отправке формы:

Started POST "/forums/x/posts" for 127.0.0.1 at 2010-12-22 10:15:19 -0500
  Processing by PostsController#create as HTML
  Parameters: {"utf8"=>"✓", "authenticity_token"=>"/cyeRIls9M..7U8eG1lXAJg8=", "post"=>{"istop"=>"parent", "content"=>"sdfgsdfg", "images_attributes"=>{"image"=>#<File:/tmp/RackMultipart20101222-874-bhvepi>}}, "commit"=>"Create Shout", "forum_id"=>"x"}
  SQL (0.054ms)  SELECT "name" FROM "forums" WHERE "name" = 'x' ORDER BY "name" LIMIT 1
  SQL (115.419ms)  INSERT INTO "posts" ("istop", "created_at", "updated_at", "forum_name") VALUES ('parent', '2010-12-22T10:15:20-05:00', '2010-12-22T10:15:20-05:00', '', 'sdfgsdfg', 0, 'x')
Redirected to http://localhost:3000/forums/x
Completed 302 Found in 123ms

Полагаю, форма в порядке, но изображение не сохраняется.

Добавление

@post.images_attributes = Image.new

или какое-либо изменение в контроллере ничего не делает, поэтому мне любопытно, нужно ли мне создать какую-то зацепку в модели Post для сохранения изображения. Я не знаю на данный момент.

0 голосов
/ 21 декабря 2010

attr_accessor: images_attributes в модели Post, позволяет отправлять форму

Однако изображение теперь не сохраняется, то есть где-то теряется и не сохраняется

...