rails4从images目录中选择现有文件或上传

时间:2015-03-29 15:23:16

标签: ruby-on-rails paperclip

我使用paperclip gem允许用户上传图片并将其关联到产品,一切正常,现在我也想让我选择保存在app / assets / images中的现有图片。 ..实际上我在产品控制器中有这个:

private
# Use callbacks to share common setup or constraints between actions.
def set_product
  @product = Product.find(params[:id])
end

# Never trust parameters from the scary internet, only allow the white list through.
def product_params
  params.require(:product).permit(:name, :price, :amount, :volume, :user, :avatar)

end

这在产品型号中:

    class Product < ActiveRecord::Base
    has_attached_file :avatar, 
    validates_attachment_content_type :avatar, :content_type 
    => /\Aimage\/.*\Z/
    end

以新/编辑形式:

<%= form_for(@product)  do |f| %>
<% if @product.errors.any? %>
<div id="error_explanation">
<h2><%= pluralize(@product.errors.count, "error") %> prohibited this
product from being saved:</h2>

  <ul>
  <% @product.errors.full_messages.each do |message| %>
    <li><%= message %></li>
  <% end %>
  </ul>
</div>
<% end %>

<div class="field">
<%= f.label :name %><br>
<%= f.text_field :name %>
</div>
<div class="field">
<%= f.label :price %><br>
<%= f.text_field :price, :value => (number_to_currency(f.object.price, 
:precision => 2) || 0) %>
 </div>
 <div class="field">
 <%= f.label :amount %><br>
 <%= f.text_field :amount, :value =>  
 (number_with_delimiter(f.object.amount, :precision => 2 || 0)) %>
 </div>
 <div class="field">
 <%= f.label :volume %><br>
 <%= f.text_field :volume,  :value =>   
 (number_with_delimiter(f.object.volume, :precision => 2 || 0)) %>
 </div>

 <div class="field">
 <%= f.label :choose_a_logo %>
 ???
 <%= f.label :or_upload_your_image %>
 <%= f.file_field :avatar %>
 </div>

<div class="actions">
<%= f.submit %>
</div>


<% end %>
有人可以帮帮我吗?非常感谢!

2 个答案:

答案 0 :(得分:1)

添加&#34; simple_form&#34;和     &#34;回形针&#34;宝石到你的宝石文件 跑

ViewController

现在运行这两个命令

ViewController -> () -> ViewController

或者为了与bootstrap运行集成

USING PERIODIC COMMIT
LOAD CSV FROM 'file:/home/kanion/studia/bazy/clean.csv' AS line
CREATE (:Publikacja { author: line[0], title: line[1]})

下一步运行

$ bundle install

modelname 应替换为您要与之关联的型号名称 xyz 应该被名称替换,用户应该称之为最常见的约定是&#39; image&#39;但在你的情况下它的化身

$ rails g simple_form:install 

下一步转到app - &gt;模特 - &gt; modelname.rb(您希望图像与上述相同的特定模型) 在&lt;%end%&gt;之前复制此内容在文件中 ............

协会

has_attached_file:头像,风格:{中:&#34; 320x240&gt;&#34;}

验证

$ rails g simple_form:install --bootstarp

如果要指定输入

,则为可选
$ rails g paperclip modelname xyz

................

请替换显示在表单视图文件顶部的 form_for simple_form_for

更新您的表单(&#34;您想要提供上传选项&#34;) 示例(&lt;%= f.input:name%&gt;)

$ rake db:migrate

更新您的表单显示 摆脱这整件事 .......................

validates_attachment :avatar, presence: true

.......................  替换为

  ,content_type: {content_type: ['avatar/jpg','avatar/jpeg']}

......... 所有设置但这只有在安装了图像magik时才有效... 通过在终端中运行以下命令来检查它

<%= f.input :avatar, label: "bla bla" %>

如果以

返回
<div class="field">
 <%= f.label :choose_a_logo %>
 ???
 <%= f.label :or_upload_your_image %>
 <%= f.file_field :avatar %>
 </div>

<%= image_tag @modelname.avatar (:medium)%>
恭喜,但如果不是先安装图像魔术

答案 1 :(得分:0)

Paperclip用于将图像从本地计算机加载到rails应用程序。

如果rails应用程序位于本地计算机上,您应该能够导航到app/assets/images并将其上传到特定对象。

如果要在服务器上提供此功能,则必须构建一个单独的屏幕以填充app/assets/images文件夹中的所有图像,并添加链接以使用这些图像。

第二种选择是发展繁重的任务;在尝试构建之前确保它正是您想要的。