2014-10-30 74 views
0

我是新来的铁轨。我试图上传附在名字上的图片。该表单的视图名称为index,并且存在名为show的视图的链接,该视图将显示添加名称时上传的名称和图像。该控制器是pages使用回形针在Rails上传图片丢失

我从一个基本的表格开始,它的工作原理是将一个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的专家个人检查数据库,这个名字是有,但所有的image_列(image_file_nameimage_content_typeimage_file_sizeimage_update_at)都只是空。

我错过了什么让它工作?随时索取更多信息。谢谢。

+1

也许如果你添加的照片在create方法,在'them'行动,它将被添加到记录中...您给“名称”赋予一个值 – 2014-10-30 08:20:38

+0

我检查了回形针上的一些教程,发现没有要添加到“他们”动作的代码。你会建议我把他们的图像添加到记录中吗? – 2014-10-30 08:23:40

回答

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

0

试试这个

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

关注轨道模型申报和命名约定。

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

按照link

+0

它不工作,'名字'甚至没有被添加到记录。 – 2014-10-30 08:34:23

+0

您可以在提交表单后向我显示您在控制台中获得的参数吗? – Debadatt 2014-10-30 08:36:18

+0

遵循rails模型声明和命名约定。 – Debadatt 2014-10-30 08:36:56

0

如果您正在使用设计进行验证 - 你需要去application.rb中文件并添加:https://github.com/plataformatec/devise

before_action :configure_permitted_parameters, if: :devise_controller? 

    protected 

    def configure_permitted_parameters 
    devise_parameter_sanitizer.for(:update) << :avatar 
    end 
相关问题