проблема со скрепкой и вложенными атрибутами - PullRequest
1 голос
/ 29 марта 2011

Использование скрепки для загрузки файлов. У меня есть проекты, вложения и таблица ассоциаций. У меня есть все до такой степени, что я могу загрузить файл, но когда он попадает в контроллер проектов, он ищет метод attachment_file_name, однако я считаю, что это должен быть user_file_file_name, так как :user_file это то, что вложения модель использует для оператора has_attachment. Вот производственный журнал:

Started POST "/projects" for 136.152.181.137 at Mon Mar 28 16:23:28 -0700 2011
  Processing by ProjectsController#create as HTML
  Parameters: {"commit"=>"Create Project", "authenticity_token"=>"xh0Ld2RKyJ6EF9jLNl3D+r1m50lKv389NCIor3H4fag=", "utf8"=>"?~\~S", "project"=>{"name"=>"Upload Test", "icon_id"=>"1", "categories_attributes"=>{"0"=>{"name"=>"Category 1", "_destroy"=>"false"}}, "content"=>"skee", "description"=>"description", "attachments_attributes"=>{"0"=>{"name"=>"name", "user_file"=>#<ActionDispatch::Http::UploadedFile:0x2aaaaf6b0fd8 @tempfile=#<File:/tmp/RackMultipart20110328-18838-4wasuv-0>, @headers="Content-Disposition: form-data; name=\"project[attachments_attributes][0][user_file]\"; filename=\"resized_DSCF0229.JPG\"\r\nContent-Type: image/jpeg\r\n", @original_filename="resized_DSCF0229.JPG", @content_type="image/jpeg">}}}}
Completed   in 6ms

NoMethodError (undefined method `attachment_file_name' for #<Attachment:0x2aaaaf6a0638>):
  app/controllers/projects_controller.rb:48:in `create'
  app/controllers/projects_controller.rb:47:in `create'

Если это поможет, вот модели:

class Project < ActiveRecord::Base
  has_many :project_file_assocs
  has_many :attachments, :through => :project_file_assocs
  accepts_nested_attributes_for :attachments
  attr_accessible :attachments_attributes
...
end


class Attachment < ActiveRecord::Base
  has_attached_file :user_file
  validates_attachment_presence :attachment

  has_many :project_file_assocs 
  has_many :projects, :through => :project_file_assocs
  attr_accessible :name, :description, :user_file_file_name, :user_file_content_type, :user_file_file_size
  #attr_accessible :name, :description, :user_file
end


class ProjectFileAssoc < ActiveRecord::Base
   belongs_to :attachment
   belongs_to :project
end

С чего бы это искать этот метод? Заранее спасибо за любую помощь!

Вот метод создания projects_controller.rb:

def create
    @project = Project.new(params[:project])

    respond_to do |format|
      if @project.save
        format.html { redirect_to(@project, :notice => 'Project was successfully created.') }
        format.xml  { render :xml => @project, :status => :created, :location => @project }
      else
        format.html { render :action => "new" }
        format.xml  { render :xml => @project.errors, :status => :unprocessable_entity }
      end
    end
  end

1 Ответ

0 голосов
/ 03 июня 2011

Я думаю, что проблема в модели вложения:

class Attachment < ActiveRecord::Base
  has_attached_file :user_file
  validates_attachment_presence :attachment

Попробуйте

  validates_attachment_presence :user_file
...