Rails4:如何使用carrierwave显示和编辑上传的文件?

我可以上传文件并将文件名保存在数据库中。 但是,当我编辑时,文件名不会出现。

我想:

  1. 单击_article.html.erb中的“编辑”链接时,显示文件名和上传的图像。
  2. 在_article.html.erb中显示上传的图像。

article.rb

class Article < ActiveRecord::Base . . has_many :photos, dependent: :destroy accepts_nested_attributes_for :photos . . end 

photo.rb

 class Photo < ActiveRecord::Base belongs_to :article mount_uploader :image, ImageUploader validates :image, presence: true #validates :article_id, presence: true end 

.schema文章

 CREATE TABLE "articles" ("id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, "content" varchar(255), "user_id" integer, "created_at" datetime, "updated_at" datetime,); 

.schema照片

 CREATE TABLE "photos" ("id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, "article_id" integer, "image" varchar(255), "created_at" datetime, "updated_at" datetime); 

articles_controller.rb

 class ArticlesController < ApplicationController . . def new @article = Article.new @article.photos.build . . end def create @article = current_user.articles.build(article_params) . . end def edit @article = Article.find(params[:id]) end def update @article = Article.find(params[:id]) if @article.update(article_params) redirect_to current_user else render 'edit' end end . . private def article_params params.require(:article).permit(:content, photos_attributes: [:id, :article_id, :image]) end . . end 

articles \ _article.html.erb

我想在此处显示上传的图片和文件名,然后点击“修改”链接(_article_form.html.erb)

 
  • . .
  • 文章\ edit.html.erb

     

    Update article

    共享\ _article_form.html.erb

    编辑时,显示“:content”。 但“:image”是“没有文件选择”……

      

    development.log(当我提交新文章时)

     Started POST "/articles" for 127.0.0.1 at 2014-07-05 16:31:11 +0900 Processing by ArticlesController#create as HTML Parameters: {"utf8"=>"?","authenticity_token"=>"uaWcqBZ6rhS/NIal/...=", "article"=>{"category_id"=>"6", "content"=>"last", "photos_attributes"=>{"0"=>{"article_id"=>"", "image"=>#<ActionDispatch::Http::UploadedFile:0x3cb0910 @tempfile=#, @original_filename="DSCN0721_080.JPG", @content_type="image/jpeg", @headers="Content-Disposition: form-data; name=\"article[photos_attributes][0][image]\"; filename=\"DSCN0721_080.JPG\"\r\nContent-Type: image/jpeg\r\n">}}}, "commit"=>"Post"} [1m[35mUser Load (1.0ms)[0m SELECT "users".* FROM "users" WHERE "users"."remember_token" = '...' LIMIT 1 [1m[36m (0.0ms)[0m [1mbegin transaction[0m [1m[35mSQL (3.0ms)[0m INSERT INTO "articles" ("content", "created_at", "category_id", "updated_at", "user_id") VALUES (?, ?, ?, ?, ?) [["content", "last"], ["created_at", Sat, 05 Jul 2014 07:31:11 UTC +00:00], ["category_id", 6], ["updated_at", Sat, 05 Jul 2014 07:31:11 UTC +00:00], ["user_id", 1]] [1m[36mSQL (27.0ms)[0m [1mINSERT INTO "photos" ("article_id", "created_at", "image", "updated_at") VALUES (?, ?, ?, ?)[0m [["article_id", 306], ["created_at", Sat, 05 Jul 2014 07:31:11 UTC +00:00], ["image", "DSCN0721_080.JPG"], ["updated_at", Sat, 05 Jul 2014 07:31:11 UTC +00:00]] [1m[35m (5.0ms)[0m commit transaction Redirected to http://localhost:3000/users/1 Completed 302 Found in 128ms (ActiveRecord: 36.0ms) 

    我之前提出了同样的问题,但没有找到任何解决方案。 我在这做了什么

     <%= form_for(@article) do |f| %> 
    <%= f.text_area :content, placeholder: "Compose new article..." %> <%= f.fields_for :photos, @article.photos do |p| %> <%= p.hidden_field :article_id %> <%= p.label :image %> <% if p.object.image %> <%= image_tag p.object.image.url %>

    <%= p.object.image.file.filename %>

    <% end %> <%= p.file_field :image %> <% end %>
    <%= f.submit "Post", class: "btn btn-large btn-primary" %> <% end %>

    即使您尝试通过js将图像文件名设置为file_field,也会出现以下错误

    无法在’HTMLInputElement’上设置’value’属性:此input元素接受一个文件名,该文件名只能以编程方式设置为空字符串。