3

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

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 

конец

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

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

+0

ли ваш основной БД схемы есть столбец VARCHAR «документ» в таблице «документы»? – clyfe

+0

Он делает, так как он говорит, что он отлично работает на консоли;) – Robin

ответ

2

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

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

с fields_for: документы

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

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

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

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

@project.documents.build 
+0

Эй, Робин, Спасибо за ответ. Когда я сделаю это сейчас; file_field не отображается в представлениях. –

+0

Я думаю, это может быть потому, что вы должны «построить» один. Поэтому в вашем контроллере сделайте '@ project.documents.build'. – Robin

+0

Спасибо, Робин. Он исправил это. –