图像不使用paperclip存储在db中

时间:2014-04-11 06:47:31

标签: ruby-on-rails paperclip

我是使用paperclip通过此链接http://railscasts.com/episodes/134-paperclip上传图像的文件字段,我想将上传的图像存储在db中:

我正在通过以下命令

在我的用户模型名称photo中生成回形针
 rails generate paperclip user photo
    rake db:migrate

我在用户模型中添加以下行:

has_attached_file :photo,:storage => :database,
                  :styles => { :small => "90x90>" },
                  :url  => "/assets/users/:id/:style/:basename.:extension",
                  :path => ":rails_root/public/assets/users/:id/:style/:basename.:extension"

    validates_attachment_presence :photo
    validates_attachment_size :photo, :less_than => 5.megabytes
    validates_attachment_content_type :photo, :content_type => ['image/jpeg', 'image/png', 'image/jpg']

下面是我的观看页面:

<%= form_for(:UploadImage, :html => { :id => "uploadimage", :multipart => true }) do |f| %>
<table width="100%">
    <% @user_basic.each do |ub| %>
    <tr>
        <td width="45%" align="right">
            <%= image_tag ub.photo.url(:small) %>
        </td>
        <td align="left">
            <%= f.file_field :photo %>
        </td>
    </tr>
    <% end %>
</table>
<table width="92%">
    <tr>
        <td align="center">
            <div class="button" style="margin-right:60px;">
                <%= f.submit "Next", { :class => "buttonSearch"} %>
            </div>
        </td>
    </tr>
</table>
<% end %>

是我的控制者:

  def create
    @blah = params[:photo]
    @user_basic=User.find(current_user.id)
    #user = User.find_by( photo_file_name: current_user.photo_file_name )

    render 'new'
  end

但是我的图片没有存储在db中。为什么?请建议我,等待你的回复。 感谢

4 个答案:

答案 0 :(得分:0)

要实际上传文件,rails用户需要具有上传目录的写权限。

如果您知道运行Rails服务器的用户,

chown -R <rails_user>:<rails_user> <rails_root>/public/assets/users/

如果您不知道运行Rails服务器的用户,

chmod -R a+w <rails_root>/public/assets/users/

答案 1 :(得分:0)

首先为模型创建条目,它将自动上传并存储文件信息

在UserController #create

中添加它
@user = User.new(params.require(:UploadImage).permit(:photo))
@user.save

CMIIW

答案 2 :(得分:0)

您没有尝试更新UploadImage控制器中的用户模型,因此未包含图片的原因。

我不确定你为什么需要一个不同的控制器; photo只是User模型的另一个属性,就像用户名,密码,电子邮件等一样。

据推测,您已经有一个有效的UsersController用于创建用户的索引,新建,创建等操作?鉴于您已将photo添加为User模型的强制属性,您应该会发现现有的UsersController现在无法添加新用户,因为无法添加照片。

为了帮助您实现目标,您只需添加:

<%= f.file_field :photo %>

到您用户的新(和编辑)视图,按照您当前视图的设置multipart: true进行设置。

然后在您的强参数中加入:photo。例如......

class UsersController < ApplicationController
  ...
  def new
    @user = User.new
  end

  def create
    @user = User.new(user_params)
    ...
  end

  private

  def user_params
    params.require(:user).permit(:photo)   # plus whatever other user attributes you have
  end
end

答案 3 :(得分:0)

如果您使用的是Rails 4,则需要使用strong params将数据传递给模型(如果您要创建新的User记录),并且如{ {1}},你必须保存数据(你当前没有这样做)

以下是一些应该有效的代码:

Teguh Syahmar