file_column完美实践 (2/343)

< 上一篇下一篇 >
本帖地址: 复制地址

修改 回帖 引用 楼主: CMO涔漠

用户形象图片

file_column完美实践
 

有关rails文件上传,跟file_column。。。原来是两码子事,我终于算是明白了,这是我解决的第一个问题。
所以,先来说说传统意义上的:怎样实现文件上传(参见上一文).

然后,开始介绍file_column的运用。

1。下载,安装插件:

两种办法,一种是在线安装,命令:
ruby script/plugin install http://opensvn.csie.org/rails_file_column/plugins/file_column/

一种是,直接下载软件包:file-column-0.3.1.tar.gz
将其释放到目录:\vendor\plugins\file_column\     下
*注:安装可能会出现很多问题,可能是提示“no such methods 'file_column'","no such file ....."等等,包下载到路径下后,试图重启一下服务呢,我也不知道怎么的,倒来到去就成功了。

2。Model

创建表:mysql> create table entries(id int not null auto_increment,
       -> image varchar(255) not null,primary key(id));

Query OK, 0 rows affected (0.11 sec)
创建model:
class Entry < ActiveRecord::Base
     file_column :image
end

3。Controller

创建一个controller:

class EntryController < ApplicationController
....

      在controller里,几乎不用做任何事情

4。View

生成View: scaffold

修改:_form.rhtml
<!--[form:entry]-->
<p><label for="entry_image">Image</label><br/>
<%= file_column_field "entry", "image" %>
</p>
<!--[eoform:entry]-->

修改:new.rhtml
<%= form_tag( { :action => 'create' }, :multipart => true ) %>
     <%= render :partial => 'form' %>
     <%= submit_tag "Create" %>
<% end_form_tag %>
*注:上面的代码是经过辗转反侧,千百遍测试,成功的。不能是:
<%= form_tag( :action => 'do_image_upload', :multipart => true ) %> 也不能是:
<%= form_tag { :action => 'do_image_upload' }, :multipart => true     %> 否则报错:
Do not know how to handle a string with value .....

修改:show.rhtml

<%= image_tag url_for_file_column("entry", "image") %>

修改:edit.rhtml
#原来:
<% form_tag :action => 'update', :id => @entry do %>
    <%= render :partial => 'form' %>
    <%= submit_tag 'Edit' %>
<% end %>
#修改后
<%= form_tag( {:action => 'update', :id => @entry},:multipart =>true ) %>
    <%= render :partial => 'form' %>
    <%= submit_tag 'Edit' %>
<% end_form_tag %>
#注意任何一点细节:<%= 而不是<%, form_tag( {block}, :multipart=>true) 而不是其他,<% end_form_tag %> 而不是<% end %> 或<% end_tag %>

================
哎,学rails真不容易啊,出点错,找遍全球的答案,也找不到。
================
新增内容:创建缩略图
修改Model:

class Entry < ActiveRecord::Base
   validates_format_of :image,   
       :with=>/^.*(.jpg|.JPG|.gif|.GIF)$/,   
       :message => "你只能上传JPG或则GIF的图片文件"  
   file_column :image, :magick => {    
             :versions => { "thumb" => "50x50", "medium" => "640x480>"}   
           }
end

#但是提示错误:uninitialized constant File_Column::Magick,这是安装的问题,也许重启服务就可以,我也是莫名其妙,倒腾来倒腾去就成功了

修改: show.rhtml
<%= image_tag url_for_file_column("entry", "image") %>
<hr/>
<%= image_tag url_for_file_column("entry","image","thumb") %>
<hr/>
<%= image_tag url_for_file_column("entry","image","medium") %>
<hr/>

回到帖子顶部

回帖 引用 1楼[楼主] CMO涔漠

用户形象图片

注:url_for_file_column 传入的第一个参数为一个实例对象
如我在list里显示图形,我用的是如下方法。不知有什么不妥[高手请指教]

<% for daily_picture in @daily_pictures %>
  <tr>
    <% @daily_picture_temp = DailyPicture.find daily_picture.id %>
    <td><%= image_tag url_for_file_column("daily_picture_temp","small_image_url","thumb") %></td>
    <td><%= daily_picture.content %></td>
    <td>
        显示时间[<%= daily_picture.show_day %>]<br/>
        <%= link_to '详情', :action => 'show', :id => daily_picture %><br/>
        <%= link_to '更新', :action => 'edit', :id => daily_picture %><br/>
        <%= link_to '删除', { :action => 'destroy', :id => daily_picture }, :confirm => '确认删除吗?', :method => :post %>
    </td>
  </tr>
<% end %>
回到帖子顶部

回帖 引用 2楼[楼主] CMO涔漠

用户形象图片

<% for daily_picture in @daily_pictures %> 
  <tr> 
    <!-- 直接将变量赋值给类变量 -->
    <% @daily_picture_temp = daily_picture %> 
    <td><%= image_tag url_for_file_column("daily_picture_temp","small_image_url","thumb") %></td> 
    <td><%= daily_picture.content %></td> 
    <td> 
        显示时间[<%= daily_picture.show_day %>]<br/> 
        <%= link_to '详情', :action => 'show', :id => daily_picture %><br/> 
        <%= link_to '更新', :action => 'edit', :id => daily_picture %><br/> 
        <%= link_to '删除', { :action => 'destroy', :id => daily_picture }, :confirm => '确认删除吗?', :method => :post %> 
    </td> 
  </tr> 
<% end %> 
回到帖子顶部
个人信息
  • 荣誉+3
  • 荣誉+2
  • 荣誉+1
  • 荣誉-1
  • 荣誉-2
  • 荣誉-3
发表留言
  • 文章不错!
  • 精华好文!
  • 支持原创文章!
  • 帖子图文并茂,好!
  • 真知灼见,说得好!
  • 恶意广告
  • 违规内容
  • 严重灌水
  • 重复发帖
  • 标题党
你确定要删除此楼层吗
扣20点经验值

快速回复进入高级回复

插入图片 选择表情

验证码 看不清?换一张(不区分大小写)

[完成后按Ctrl+Enter发表]
[回复须知]