Rails Tricks #1

本文深入探讨Rails框架的高级用法,包括with_scope函数的灵活应用、模板渲染的自定义、日志过滤敏感信息的方法、调试技巧及routes配置的细节。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

《Agile Web Develop》这本书里面只是简单介绍了下Rails ,许多东西为什么,以及更多有趣的东西都没有提到。

看别人项目源码后,才觉得Rails 的内容还真不是一般多。而ruby 随意修改内核功能的特性,更导致代码阅读起来额外麻烦。甚至不需要include,直接继承基类后extend就可以在其他地方使用了 - -

 

with_scope  :ActiveRecord::Base   很方便的函数,用在需要不定参数查找时特好用

  class Article < ActiveRecord::Base
    def self.create_with_scope
      with_scope(:find => { :conditions => "blog_id = 1" }, :create => { :blog_id => 1 }) do
        find(1) # => SELECT * from articles WHERE blog_id = 1 AND id = 1
        a = create(1)
        a.blog_id # => 1
      end
    end
  end

 

模板渲染

一般情况下,模板中只有一个<yield>用来填充内容。如果有特殊需要,比如需要额外的css,js 可以添加额外的 <%=yield:name_space %>

然后在需要使用的地方:

<% content_for :name_space do %>
    <!-- code you wanna place here-->
<%end%>

 

过滤私密信息:

经常会发生这种情况,测试的时候用户的登录名,密码都在日志里面一览无余。如果觉得良心不安,使用这个:

filter_parameter_logging :password

这样会将和password 有关的内容过滤掉。

 

调试:

  controller : raise sth

  viewer:      debug sth

  console    : y sth

 

routes 里面 member 和 collection 的区别:

比如  map.resources :days,member =>{:today=>:get}

        map.resources :days,collection =>{:today=>:get}

一开始以为两种方法一样,member生成的路径是 get_day_path(:id) ,而collection生成的是get_days_path

 

关于 form_for :

 一开始对 scaffold 后生成的 form_for 很好奇,因为在 new, edit 里面居然是相同的代码,连路径都没有。

很困惑后,查看源码才知道原因。Rails代码封装的太恐怖了,首先它会判断 form_for 的变量是否是个 new_record?

如果后面没有路径它会根据变量的属性来确定是新建还是修改。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值