Rails Tricks #2

本文分享了一些Rails开发中的实用技巧,包括根据不同请求设置不同布局的方法、处理表单中多个模型的有效方式,以及如何利用Rails的Hook机制扩展应用功能等。

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

个人摸索的一点点经验

 

Layout  

如果想让页面对不同的响应返回不同的模板,比如ajax请求,普通get

可以这样写:

class TopicsController < ApplicationController

layout :set_layout

#... ...

private

  def set_layout
    if request.xhr?
      false
    else
       "application"
    end
  end
end

 

FORM 表单

同表单中有多个model时候,可以用

fields_for @model_name  ,block

这样在后台抓数据就不用一个个抓了,

params[:model_name]  就可以了

 

form_for 还有个不错的参数 form_for [:prefix,@model]

这样生成的URL会有个前缀,可以节约不少代码了~~

 

Rails  Hook

如果要HOOK一些方法,通常有这几种方法

  1. 写到config / initialize 下
  2. 写到 lib 下, 然后在enviroment 里面包含该文件
  3. 新建一个 plugin ,写在 plugin / lib 下 ,然后在 init.rb 里面包含该文件

 

 

Mass assign

相互嵌套的模型可以使用这个。Rails 2.3 已經不能使用這個。

而可以通過Nested Object Form 實現

 

class User < ActiveRecord::Base
  validates_presence_of :login
  has_many :phone_numbers, :accessible => true
end

class PhoneNumber < ActiveRecord::Base
  validates_presence_of :area_code, :number
  belongs_to :user
end

 

 

a = User.create( {
  :login => 'xhan',
  :phone_numbers => [
    { :area_code => '919', :number => '123-4567' },
    { :area_code => '920', :number => '123-8901' }
  ]
})

a.phone_numbers.count  # => 2

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值