RoR: Carrierwave не работает / сохранение в базу данных - PullRequest
3 голосов
/ 20 декабря 2011

Это моя взломанная попытка заставить Carrierwave работать прямо после просмотра Railscast.У меня есть страница пост-проекта, где пользователи вводят детали для проекта.Они также могут загрузить файл на эту страницу и отправить проект.Поэтому я использую nested_form_for на странице.

new_step_3.html.erb

<%= nested_form_for @project, :html => {:multipart => true} do |f| %>
  <%= f.text_field :title %>
  <%= f.text_field :description %>

    <%= f.fields_for :document do |attachment_form| %>
      <%= attachment_form.file_field :title %>
    <% end %>

  <%= f.text_field :skills %>
  <%= f.submit 'Post Project' %>
<% end %>

project.rb модель

attr_accessible :category, :title, :budget, :end_date, :description, :skills, :document, :days_lasting, :documents_attributes

belongs_to :user
has_many :posts
has_many :documents, :as => :attachable

validates_presence_of :category, :title, :description, :skills

accepts_nested_attributes_for :documents

document.rb модель

attr_accessible :project_id, :title, :document

belongs_to :user
belongs_to :project
has_many :posts

mount_uploader :document, DocumentUploader

projects_controller.rb

def create
@project = current_user.projects.build(params[:project])

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

end

Прямо сейчас, когда я пытаюсь отправить форму, она скажет неизвестный атрибут: document app / controllers / projects_controller.rb: 85: in `create '

Выполнение команды в консоли Rails работает Document.create! (: Document => File.new (" test.jpg "))

1 Ответ

2 голосов
/ 20 декабря 2011

Я думаю, что это должно быть

<%= f.fields_for :documents do |attachment_form| %>
  <%= attachment_form.file_field :title %>
<% end %>

с полями для: документов

Вот почему он не находит атрибут document. Ваша форма, вероятно, отправляет такой хеш-код:

{
  :project => {
    :title => "blabla",
    :document => {...}
  }
}

и он не знает, что делать с документом. Теперь ваши вложенные документы будут в: Documents => {}, и с accepts_nested_attributes_for, это должно работать.

Вы должны build документ для этого проекта в контроллере:

@project.documents.build
...