在Rails中使用回形针上传图像缺失

时间:2014-10-30 08:15:43

标签: ruby-on-rails ruby file-upload paperclip

我是铁杆新手。我试图上传附加到名称的图像。表单位于视图名称index中,并且有一个名为show的视图的链接,该视图将显示添加名称时上传的名称和图像。控制器为pages

我从一个基本表单开始,它可以在name模型中添加Users字段。问题是当我使用回形针上传图像同时将名称推入数据库时​​,图像没有显示在show中,而是一个破损的图像链接。让我解释一下我是如何做到的。

我安装了回形针。

Users然后rails g paperclip users image将新列添加到rake db:migrate模型,新列现在位于Users

接下来,我按<%= f.file_field :image %>在表单中创建一个file_field,并将has_attached_file :image添加到Users模型。 在view内,我创建了一个数据库循环,用<%= image_tag t.image.url %>打印出名称和图像

显示的是名称,但图像不是,它丢失了。这是代码:

索引视图:

    <a href="show">To SHOW</a><br>
    <%= form_for @add, :url =>  { :action => "them"}, :html => { :multipart => true} do |f| %>
    Name: <%= f.text_field :name %><br>
    Photo: <%= f.file_field :image %><br>
    <%= f.submit "Add" %>
    <% end %>

节目视图:

    <% @everything.each do |t| %>
     <%= t.name %>
     <%= image_tag t.image.url %>
     <br><br><br>
    <% end %>

控制器:

    class PagesController < ApplicationController
      def index
        @add = Users.new
      end

      def them
        Users.create :name => params[:users][:name]
        redirect_to :action => "index"
      end

      def show
        @everything = Users.all
      end
    end

users.rb型号:

    class Users < ActiveRecord::Base
      attr_accessible :name

      has_attached_file :image
    end

routes.rb中:

    get "pages/index"
    match "pages/them" => "pages#them", :via => :post
    get "pages/show"

我使用SQLite Expert Personal检查数据库,名称在那里,但所有image_列(image_file_nameimage_content_typeimage_file_sizeimage_update_at)都只是空。

我是否错过了让它发挥作用的东西?随意询问更多信息。谢谢。

3 个答案:

答案 0 :(得分:0)

试试这个

Users.create({:name => params[:users][:name], :image => params[:users][:image] })

遵循rails模型声明和命名约定。

用户模型应命名为User。它将在数据库迁移后创建一个用户表。

关注link

答案 1 :(得分:0)

在Debadatt的帮助下,我找到了解决方案,安装imagemagick然后应用Users.create({:name => params[:users][:name], :image => params[:users][:image] }),因为Debadatt建议会这样做。

如果出现Paperclip::Errors::NotIdentifiedByImageMagickError:之类的错误,只需将gem "cocaine", "= 0.3.2"添加到gemfile和bundle install,然后下载或更新所需的cocaine

答案 2 :(得分:0)

如果您使用设计进行身份验证 - 则需要转到application.rb文件并添加:https://github.com/plataformatec/devise

Install failed. Rolling back...
Install-Package : 'MvvmCross.HotTuna.CrossCore' already has a dependency defined for 'MvvmCross.HotTuna.Binding'.
At line:1 char:1
+ Install-Package Xamarin.GooglePlayServices.Base -Pre
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (:) [Install-Package], InvalidOperationException
    + FullyQualifiedErrorId : NuGetCmdletUnhandledException,NuGet.PowerShell.Commands.InstallPackageCommand