`

ror学习小结6

阅读更多
1 每个controler都会在app\views下有一个相应的目录

2 视图中输出debug信息
<%=DEBUG params %>

  <%=debug response%>

3 页面上输出
     <%=session[:user_name]%>.....
4 XML模版
   xml = Builder::XmlMarkup.new(:indent=>2, :margin=>4)
xml.instruct!ml, :version=>"1.0", :encoding=>"utf-8"
xml.books do
  xml.book(:id=>'1') do
    xml.name('xxxx')
    xml.author('dsdsd')
    xml.price ('68')
  end
  xml.book(:id=>'2') do
    xml.name('ddddd')
    xml.author('dsd')
    xml.price ('98')
  end
end
  控制器中可以直接对响应设置
    format.xml即可

5 image_path("logo.png"); 获得图片路径

6 加载javacript库
   javascript_include_tag "prototype"
==<script type="......">
   获得某个javascript路径
      <%=javascript_path "xxx.js"%>
7 加入css
     <%=stylesheet_link_tag "xxxx.css"/>

8 定义数字格式输出
   有一系列number_with_xxxx的方法,例子
      <% @books.each do |book| %>
  <tr style='background:<%= cycle("#ECECEC","#FFFFFF")  %>'>
    <td><%=number_to_currency( book.id, :unit => "NO.", :format => "%u %

n",:precision => 0) %></td>
    <td><%= book.name %></td>
    <td><%= number_to_currency(book.price, :unit => "¥", :separator => ".",

:delimiter => ",") %></td>
    <td><%= number_to_currency(book.count, :unit => "个", :format => "%n %u")

%></td>
    <td><%= link_to '查看', book %></td>
  </tr>
  <% end %>


9 生成超连接,及表单助手类
  link_to link_to_if,link_to_unlses,form_tag等。。。。。

10 form_for
    比如控制器中
     def add
      @employee=Employee.new
     end
    表单中:
       <% form_for(@employee) do |f| %>
         ........
     这样表单提交后,直接
      def create
    @employee = Employee.new(params[:employee])

    respond_to do |format|
      if @employee.save
. ...................

11 日期和时间
    下拉日期选择框
      (选择日期)select_date方法:<%= select_date() %><br/>
(选择日期和时间)select_datetime方法:<%= select_datetime() %><br/>
(选择年)select_year方法:<%= select_year(Time.now,:field_name => 'birth') %

><br/>
(选择月)select_month方法:<%= select_month (Date.today) %><br/>
(选择日)select_day方法:<%= select_day(12) %><br/>
(选择时间)select_time方法:<%= select_time() %><br/>
(选择时)select_hour方法:<%= select_hour(5) %><br/>
(选择分)select_minute方法:<%= select_minute(15) %><br/>
(选择秒)select_second方法:<%= select_second(Time.now) %><br/>

12 自定义模版helper类
    可以在app/helpers下创建一个包含helper类的books_helper.rb文件,封装输出的方


  module BooksHelper

  def index_helper books
    html=''
   ......
end
  然后在HTML页中调用:
    <%=raw index_helper @books %>

13 cookie
    cookie[:myname]="xxxx"
   读取myname=cookid[:myname]
  删除cookies.delete :myname
cookies[:cart]={:value=>cart,:expires=>Time.now+3600}

14 flash[:notice]="xxxxx"
  跨页面传值
   <%=notice%>

15 rails异步提交表单
    <a href="ajax/new" data-remote="true" id="new">xxxx</xxx>
    将异步提交到new这个controller去处理
form_tag标记
   <% form_tag("ajax/res",:remote=>true,:id=>"f1") do%>
........
   例子:一个页面中有登陆的表单,登陆后,AJAX提交,页面其他部分不变

   def login
    username=request["user"]["name"]
    password=request["user"]["password"]

    @username = username
    @rule = "VIP用户"

    respond_to do |format|
      format.html { render :layout => false }
      format.xml  { renderml => @ajaxes }
    end
  end
  登陆后的视图:
  <br>
<div>您好<span><%= @username %></span>!</div>
<div>您的角色是<span><%= @rule %></span></div>
    登陆的表单
        <div id="login">
    <% form_tag("/ajaxes/login", :remote => true, :id => "lf") do %>
    <div>用户名:<%= text_field("user", "name", :class=>"input")  %></div>
    <div>密 码:<%= password_field("user", "password", :class=>"input")  %

></div>
    <div><button type="submit">登录</button></div>
    <% end %>
  </div>

   请求的JS
   $(function($) {
    $('#lf').bind(
        'ajax:success',
        function(data, status, xhr) {
            $("#login").html(status);
        }).bind(
        'ajax:error',
        function(xhr, status, error) {
            alert(error);
        });
});

16  文件上传
   def upload
      image=params[:img]
      content_size=image.size
      file_data=image.read
      filetype=image.content_type
      @filename=image.original_filename
      fileext=File.basename(@filename).split(".")[1]
      @time=Time.now.to_s
      timeext=File.basename(@time).split("+")[0]
      newfilename=timeext+"."+fileext
      File.open("#{Rails.root}/public/"+ newfilename,"wb"){
        |f| f.write(file_data)
      }
      flash[:notice]="文件:"+ newfilename+"上传成功。"+
          "上传时间是:"+(Time.now).to_s+
          "上传的地址是:"+ "#{Rails.root}/public/"
      render :action=>"uploadImg"
    end
   上传表单的设计
       <% form_tag "/carts/upload",:multipart => true do %>
  <%= file_field_tag(:img,:size=>"40") %>
      <%= submit_tag("上传文件") %>
  <% end %>

17 下载文件

   send_file方式:
        <%= link_to "下载文件" ,:action=> "downFile",:filename=>"#

{cart.img}.jpg" %>
    downFile控制器内容:
      def downFile
    send_file "#{Rails.root}/public/images/"+params[:filename] unless params

[:filename].blank?
  end

    send_data方式:
       def downSendData
    io=File.open("#{Rails.root}/public/images/"+params[:filename])
    io.binmode
    send_data(io.read,
   :filename=> params[:filename],
   :type=>"image.jpg",
   :disposition=>"attachment"
   )
    io.close
  end

18 使用CKEDITOR
  见 http://www.162cm.com/archives/1156.html的配置
19 使用actionmailer
   1)config下的enviroment中添加代码
    ActionMailer::Base.delivery_method=:smtp
ActionMailer::Base.default_charset="UTF-8"
ActionMailer::Base.smtp_settings={
    :address=>"smtp.foxmail.com",
    :port=>25,
    :domain=>"foxmail.com",
    :user_name=> "somboy",
    :password=> "123456",
    :authentication=> :login
}
  2) views\sysemail目录下建立一个发送模版sent.html.erb
    <div>
  <p>注册成功,请激活后登录</p>
  <p><h3><%=@user.name %>,您好!</h3></p>
  <p>请在浏览器的地址栏中输入如下地址来激活您的账户</p>
  <p><a href="http://localhost:3000/account/proActivate?name=<%=@user.name %

>&active_code=<%=@user.active_code %>">
    http://localhost:3000/account/proActivate?name=<%=@user.name %

>&active_code=<%=@user.active_code %>
  </a></p>
</div>
  3) app\mailers\sysemail.rb
     class Sysemail < ActionMailer::Base
  default :from => "from@example.com"

  # Subject can be set in your I18n file at config/locales/en.yml
  # with the following lookup:
  #
  #   en.sysemail.sent.subject
  #
  def sent(user,sent_at=Time.now)
    subject "激活邮件,来自【dddd】"
    recipients user.email
    from  "somboy@foxmail.com"
    sent_on sent_at
    body :user=>user
    content_type "text/html"
  end

   4) 发送的逻辑,比如保存用户后发送:
    def proReg
    @user=User.new(params[:user])
    @user.active_code=rand(Time.now.to_i).to_s
    @user.is_actived=0
    if @user.save then
      flash[:notice]="success"
      flash[:name]=@user.name
      Sysemail.deliver_sent(@user)
      render "Sysemail/sent"

20 页面缓存
  启动缓存:
   修改config/enviroments/development.rb中设置
    config.action_controller.perform_caching=true
    使用:
    cache_page :index(设置使用缓存的页面)
  清除cache
        expire_page (:action=>"index")
  局部缓存:
    <%cache do%>
        //视图中的代码
    <%end%>
     当失效时:
     expire_fragment :action=>"show"

21 分页器
   使用will_paginate库
   gem 'will_paginate','3.0.pre2'
    @tabflowers=Tabflower.paginate :page => params[:page], :per_page => 9
    sql="select count(*) from tabflowers"
    @totalTS=Tabflower.count_by_sql(sql)
    totalTS=Tabflower.count_by_sql(sql)
    @currentYS=params[:page]
    @perPage=9
    perPage=9
    if totalTS % perPage!=0
      totalJY=totalTS / perPage+1
    else
      totalJY=totalTS / perPage
    end
    @totalJY=totalJY
    @tabuser=session[:tabuser]
      respond_to do |format|
      format.html # index.html.erb
      format.xml  { renderml => @tabflowers }
    end

视图页中
      <tr><td>共<%=@totalJY %>页,共<%= @totalTS %>条,每页显示<%=@perPage %>条</td><td><%=

will_paginate @tabflowers,:prev_label=> "上一页",:next_label=>:"下一页" %></td></tr>

16 全局配置信息。比如在config目录下新建site.yml配置文件:
   title:xxxx
   author:xxxx

    在lib/enki/config.rb文件中,载入配置文件
        def self.default_location
      "#{Rails.root}/config/site.yml"
    end

  然后在app/controlers/application_controller.rb中,进行全局编码和全局变量的加载
    class ApplicationController < ActionController::Base
  protect_from_forgery
  after_filter :set_content_type

  protected

  def set_content_type
    headers['Content-Type'] ||= 'text/html; charset=utf-8'
  end

  def enki_config
    @@enki_config = Enki::Config.default
  end
  helper_method :enki_config
end  
  在前端页面中调用显示这些变量的值 <%=enki_config[:title]%>

17 content_for的用法
   如果我们想根据模板页面更改局部layout,使用content_for即可。
content_for允许模板页面代码放到layout中的任何位置。

比如我们的Rails程序不同的页面有不同的css样式,我们可以在layout里留出位置:
Java代码 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" 
  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">  
<html>  
  <head>  
    <title>Todo List</title>  
    <%= stylesheet_link_tag 'application' %>  
    <%= yield :head %>  
  </head>  
  <body>  
    <div id="container">  
      <h1>Todo List</h1>  
      <%= yield %>  
    </div>  
  </body>  
</html> 

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html>
  <head>
    <title>Todo List</title>
    <%= stylesheet_link_tag 'application' %>
    <%= yield :head %>
  </head>
  <body>
    <div id="container">
      <h1>Todo List</h1>
      <%= yield %>
    </div>
  </body>
</html>

我们用yield :head来给模板页面某段代码留个"座位",再看页面:
Java代码 
<% content_for :head do %>  
  <%= stylesheet_link_tag 'projects' %>  
<% end %>  
<h2>Projects</h2>  
<ul>  
<% for project in @projects %>  
  <li><%= project.name %></li>  
<% end %> 

<% content_for :head do %>
  <%= stylesheet_link_tag 'projects' %>
<% end %>
<h2>Projects</h2>
<ul>
<% for project in @projects %>
  <li><%= project.name %></li>
<% end %>

content_for :head里面的代码将填充layout里的yield :head。

18 render partial参数
  
1. 默认参数

Ruby代码 
<%= render :partial => "account" %> 

<%= render :partial => "account" %>
默认本地有个变量@account, 传递过去,render到的partial(_account.erb)有个变量account

2. 单独参数 locals
locals传递一组hash参数hash 值是本地的变量,hash的key是partial里的变量

Ruby代码 
<%= render :partial => "account", :locals => { :account => @buyer } %>  
 
<% for ad in @advertisements %>  
  <%= render :partial => "ad", :locals => { :ad => ad } %>  
<% end %>  

<%= render :partial => "account", :locals => { :account => @buyer } %>

<% for ad in @advertisements %>
  <%= render :partial => "ad", :locals => { :ad => ad } %>
<% end %>
上面两个render分别
传递本地变量@buyer到_account.erb里叫account的参数
传递本地变量ad到_ad.erb里叫ad

3

根据1默认参数下面两个是一样的

Ruby代码 
<%= render :partial => "contract", :locals => { :contract  => @contract } %>  
 
<%= render :partial => "contract" %> 

<%= render :partial => "contract", :locals => { :contract  => @contract } %>

<%= render :partial => "contract" %>


4. as使用

用来改变传递之后,partial里变量的名称,如下,render方式是一样的。

Ruby代码 
<%= render :partial => "contract", :as => :agreement 
 
<%= render :partial => "contract", :locals => { :agreement => @contract } 

<%= render :partial => "contract", :as => :agreement

<%= render :partial => "contract", :locals => { :agreement => @contract }
传递@contract到_contract.erb里,partial里的变量名为agreement

5. object使用

object最简单,就是把一个变量原名传递到partial里,
所以什么都记不清楚的时候,就用object多写点都能表达

如下:
Ruby代码 
<%= render :partial => "account",bject => @buyer %>  
 
<% for ad in @advertisements %>  
  <%= render :partial => "ad",bject => ad %>  
<% end %> 

<%= render :partial => "account",bject => @buyer %>

<% for ad in @advertisements %>
  <%= render :partial => "ad",bject => ad %>
<% end %>
传递@buyer到_account.erb的partial里变量名还是@buyer
传递ad到_ad.erb的partial里变量名还是ad

6 object和as合用

Ruby代码 
<%= render :partial => "contract",bject => @contract, :as => :contract %>  
 
<%= render :partial => "contract" %> 

<%= render :partial => "contract",bject => @contract, :as => :contract %>

<%= render :partial => "contract" %>

7 collection

Ruby代码 
<%= render :partial => "ad", :collection => @advertisements %> 

<%= render :partial => "ad", :collection => @advertisements %>

@advertisements是一个array,partial里_ad.erb有个ad变量是@advertisements的成员。就是_ad.erb不用写loop只

是一条广告显示。

Ruby代码 
<%= render :partial => "ad", :collection => @advertisements, :spacer_template => "ad_divider" %> 

<%= render :partial => "ad", :collection => @advertisements, :spacer_template => "ad_divider" %>
同上,循环显示_ad.erb _ad_divider.erb 显示@advertisements.size次其中partial_ad_counter是默认计数器表示

第几条广告

8 默认

看你要partial的变量是一组记录还是一条记录,会对应约定用locals和collection
Ruby代码 
#@account是一条记录  
# <%= render :partial => "accounts/account", :locals => { :account => @account} %>  
<%= render :partial => @account %>  
 
# @posts是一组记录  
# <%= render :partial => "posts/post", :collection => @posts %>  
<%= render :partial => @posts %> 

#@account是一条记录
# <%= render :partial => "accounts/account", :locals => { :account => @account} %>
<%= render :partial => @account %>

# @posts是一组记录
# <%= render :partial => "posts/post", :collection => @posts %>
<%= render :partial => @posts %>
这是很人性的约定,可有时候就是忘了

9 一些漂亮的简写

Ruby代码 
#<%= render :partial => "account" %>可用下面代替  
<%= render "account" %>  
 
#<%= render :partial => "account", :locals => { :account => @buyer } %>可用下面代替  
<%= render "account", :account => @buyer %>  
 
# @account是一条记录  
# <%= render :partial => "accounts/account", :locals => { :account => @account } %>可用下面代替  
<%= render(@account) %>  
 
# @posts是一组记录  
# <%= render :partial => "posts/post", :collection => @posts %>可用下面代替  
<%= render(@posts) %> 

#<%= render :partial => "account" %>可用下面代替
<%= render "account" %>

#<%= render :partial => "account", :locals => { :account => @buyer } %>可用下面代替
<%= render "account", :account => @buyer %>

# @account是一条记录
# <%= render :partial => "accounts/account", :locals => { :account => @account } %>可用下面代替
<%= render(@account) %>

# @posts是一组记录
# <%= render :partial => "posts/post", :collection => @posts %>可用下面代替
<%= render(@posts) %>

10 layout

Ruby代码 
<%# app/views/users/index.html.erb &>  
Here's the administrator:  
<%= render :partial => "user", :layout => "administrator", :locals => { :user => administrator } %>  
 
Here's the editor:  
<%= render :partial => "user", :layout => "editor", :locals => { :user => editor } %>  
 
<%# app/views/users/_user.html.erb &>  
Name: <%= user.name %>  
 
<%# app/views/users/_administrator.html.erb &>  
<div id="administrator">  
  Budget: $<%= user.budget %>  
  <%= yield %>  
</div>  
 
<%# app/views/users/_editor.html.erb &>  
<div id="editor">  
  Deadline: <%= user.deadline %>  
  <%= yield %>  
</div> 
     


分享到:
评论

相关推荐

    神经网络ror resenet模型

    这两个数据集的难度相对较大,因为类别的数量多,图像尺寸小,这使得它们成为评估深度学习模型在图像识别上的有效性的重要基准。 **ResNet和Ror模型在CIFAR数据集上的表现** 在CIFAR-10上达到89%的准确率,以及在...

    初探ROR

    **初探ROR** Ruby on Rails(简称ROR)是一个基于Ruby编程语言的开源Web应用程序框架,它遵循MVC(模型-视图-控制器)架构模式,旨在促进...通过学习和实践,你将能够利用ROR构建出功能强大、易于维护的Web应用程序。

    Windows 上搭建 ROR环境

    ### Windows上搭建Ruby on Rails(ROR)环境详解 #### 一、引言 随着Web开发技术的不断发展,Ruby on Rails(简称Rails或ROR)作为一种高效、简洁且优雅的Web开发框架,受到了广大开发者的青睐。然而,在Windows...

    freemis 基于ror框架的mis

    总结,FreeMIS是一个运用了Ruby on Rails强大特性的管理信息系统实例,它体现了敏捷开发的理念,为开发者提供了快速构建企业级应用的平台。无论你是初学者还是经验丰富的开发者,都可以从中学习到关于Web应用开发的...

    基于sqlite的ror例子

    标题 "基于sqlite的ror例子" 暗示我们即将探讨的是如何在Ruby on Rails (RoR) 应用程序中使用...通过学习这个例子,开发者可以深入理解RoR如何与SQLite数据库协作,这对于初学者和有经验的开发者都是宝贵的学习资源。

    基于RoR的在线考试系统

    总结来说,基于Ruby on Rails的在线考试系统开发是一项综合性的任务,涉及后端逻辑、数据库设计、用户交互等多个层面。通过合理利用RoR的特性,我们可以构建出功能完善、易用性强、安全性高的在线考试平台,为教育...

    IRIS-RoR-Bootcamp-2020

    IRIS-RoR-Bootcamp-2020 由于大多数参与者都不熟悉Ruby,因此我们创建了一些练习来学习和练习Ruby语法-涵盖条件语句( if , else , elsif ),不同的迭代方式( each , select和map )以及面向对象的基本代码...

    铁道中文应用开发现状综述2006版

    本报告旨在总结2006年8月底之前的Ruby on Rails(简称ROR)在中国的应用和发展现状,侧重于描述而非深度分析。报告计划随着ROR在中国的发展而不断更新,未来版本可能会引入更加科学严谨的数据收集方法,例如问卷调查...

    arm指令 指令学习

    ### ARM指令集学习知识点 #### 一、ARM指令集概览 ARM(Advanced RISC Machines)指令集是一种基于精简指令集计算机(RISC)架构的指令集标准,广泛应用于移动设备、嵌入式系统等领域。本章节将详细介绍ARM指令集的...

    学习汇编很好的例子,也可加深对C语言理解

    通过深入学习汇编语言,不仅可以提升程序员对底层硬件的理解,还能帮助他们更好地掌握高级语言如C语言的工作原理。本文将通过对给定汇编代码片段的分析,来探讨几种重要的定点运算及转换技巧,并结合实例说明这些...

    汇编语言知识点总结.docx

    4. **逻辑运算指令**:如AND、OR、XOR用于逻辑操作,NOT用于取反,TEST用于测试,SHL、SAL、SHR、SAR用于位移,ROL、ROR、RCL、RCR用于循环移位。 5. **其他指令**:如CBW、CWD、CWDE、CDQ用于数据转换,它们根据...

    NAIS PLC中文手册第三章高级指令(7).pdf

    总结来说,通过上述高级指令的详细解析,我们可以了解到NAIS PLC中文手册第三章所涵盖的高级指令在数据位操作方面的强大功能和灵活应用,以及在编程时需要注意的规则和限制。这些知识点对于PLC程序员在实际应用中...

    Java、.Net、PHP、Ruby优劣势概览

    然而,Java 的部署过程相对繁琐,不适合快速开发和小型项目,学习曲线也相对较陡峭。 .Net,尤其是从1.x到3.0的进化,逐渐增加了企业级开发的功能,如ASP.NET MVC等框架。在Web开发中,.Net 的服务器控件为开发带来...

    myRoR:在 thinkful.com 学习 Ruby on Rails

    学习RoR不仅仅是学习语言和框架本身,还包括如何利用这些强大的库来解决实际问题。 通过"myRoR"的学习,你将不仅了解到RoR的基本概念,还能深入理解Web开发流程,包括数据库设计、前后端交互、用户体验优化等。在...

    有机化学复习总结wei.doc

    在有机化学的学习中,理解并掌握试剂的性质及其在反应中的角色至关重要。本复习总结主要涉及了四个关键知识点:试剂的分类、反应类型、有机反应活性中间体以及过渡状态。 1. **试剂的分类与试剂的酸碱性** - **...

    Milog是一个基于RubyonRails的个人博客网站_Ruby_HTML_.zip

    **Milog:基于Ruby on Rails的个人博客系统** Ruby on Rails(RoR)是一个流行的开源Web应用程序框架,它采用模型-...通过学习和理解这个项目,开发者不仅可以深化对RoR的理解,还能掌握构建Web应用的基本流程和技巧。

    RailsTutorial_FirstApp:Rails教程first_app

    在Ruby on Rails(RoR)框架中,"RailsTutorial_FirstApp"是一个常见的起点,用于学习和实践RoR的基础知识。这个教程旨在引导开发者创建他们的第一个Web应用程序,这通常包括了解RoR的核心概念、MVC(模型-视图-控制...

    微机原理与接口实验报告

    **四、实验小结** - 通过这两个实验,学生能够深入理解8255芯片的基本工作原理及其在微机系统中的应用。 - 实验中遇到的问题,如软延时不够精确等问题,可以通过增加循环次数或使用硬件定时器等方式解决。 #### ...

    Crafting Rails 4 Applications

    但这并不会影响其作为学习资源的价值。 5. **持续更新**:通过参与本书的Beta测试,读者可以获得最新的更新内容,并在最终版本发布后继续接收更新。 综上所述,《Crafting Rails 4 Applications》是一本旨在帮助...

Global site tag (gtag.js) - Google Analytics