首页 > 解决方案 > 在 Rails 中使用 html 表单上传图片

问题描述

我目前正在使用 rails 上传图片,但遇到了一些问题。我有一个创建任务的表单,并有一个用于上传图像的列。但是,当我检查终端时,表单没有在参数中发送图像,所以每当我创建一个新对象时,它都不包含图像。我正在使用carrierwave gem有人帮助我吗?

我是新手,对 Ruby 表单的使用很困惑,所以我现在倾向于坚持使用 HTML 标签。

查看(我没有包含所有代码,否则很难阅读)

<form id="new_form" name="task" role="form" enctype="multipart/form-data">
  <input type="file" name="avatar" class="form-control" id="avatar" accept="image/*">
  <input type="submit" class="btn btn-success" id="submit">
</form>

控制器

def create
    @item = item.new(name: params[:name],
                     avatar: params[:avatar])
    @item.save
end

标签: ruby-on-rails

解决方案


对不起,我不能发表评论,所以我会尝试作为答案...您是否生成了图像上传器?你mount_uploaders :images, ImageUploader在你的模型中添加了吗?你的表格呢?你能告诉我们你写的方式吗?我相信它应该看起来像这样

 # View
<%= form_for @task,  html: { multipart: true }  do |f| %>
  <%= f.text_field :some_title %>
  <%= f.file_field :images %>
  <%= f.submit "Create" %>  
<% end %>

# Controller

## Action
def create
  @item = Item.new(item_params)
  params[:item]['avatar'].each do |avatar|
    @item.avatar = avatar
    @item.save
  end
end

private

def items_params
  params.require(:item).permit(:title, {avatars: []})
end

推荐阅读