3

これは、Railkeastを見てCarrierwaveを正しく動作させるための、ハッキングされた試みです。私はユーザーがプロジェクトの詳細を入力する投稿プロジェクトページを持っています。また、このページにファイルをアップロードしてプロジェクトを送信することもできます。だから私はページ上で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"))私はそれがfields_forと

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

されるべきだと思う

+0

は、あなたの基本的なDBスキーマを「文書」の表にVARCHAR「文書」欄がありますか? – clyfe

+0

それは彼がそれがコンソールでうまく動作すると言って以来です;) – Robin

答えて

2

文書

これは、document属性が見つからない理由です。あなたのフォームはおそらくそのようなハッシュを送信します:

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

それはドキュメントで何をすべきか分かりません。 ネストされたドキュメントは、ドキュメント=> {}にあり、で動作するはずです。

あなたは、コントローラにbuildにこのプロジェクトのための文書を持っている:

@project.documents.build 
+0

ちょっとロビン、答えをありがとう。今私がそれをするとき。 file_fieldはビューに表示されません。 –

+0

あなたはビルドする必要があるかもしれないと思います。したがって、あなたのコントローラでは、 '@ project.documents.build'を実行してください。 – Robin

+0

ありがとうRobin。それはそれを直した。 –

関連する問題