rails常用小技巧合集(一)

news/2024/11/29 8:59:46/


1:helper_method :current_user
这样可以在页面上调用current_user方法
2:include UserHelper
这样可以在controller中调用helper内的方法
3:model中使用路由方法
a> Rails.application.routes.url_helpers.urlhelper方法名
b>include Rails.application.routes.url_helpers

源码位置: actionpack/lib/action_dispatch/routing/url_for.rb
使用示例:
class User < ActiveRecord::Baseinclude Rails.application.routes.url_helpersdef base_uriuser_path(self)end
end
User.find(1).base_uri # => "/users/1"   
#或者直接使用
Rails.application.routes.url_helpers.user_path(self)

4:after_save和after_commit
after_save是在数据库中添加数据完成后执行的
after_commit 是rails把每次和数据库交互当成一个事务,
begin … save… commit 之后执行

        after_commit  do |good|puts good.nameendafter_save do |good|puts good.name + "三三三四四"end测试代码:Good.build_for_demo({}).save
    输出:BEGINSQL (0.5ms)  INSERT INTO `goods`(`name`, `spec`, `ref_price`, `points`, `par`, `created_at`, `updated_at`) VALUES ('示例奖品', '250ml', 6.0, 120, 100, '2018-02-05 09:33:31', '2018-02-05 09:33:31')示例奖品三三三四四(2.1ms)  COMMIT示例奖品

5:routes中 namespace 和 scope区别
使用 namespace 创建嵌套路由,自动创建命名空间前缀,通常用于管理一组相关的路由,并且通常会影响路由名称和控制器查找。

使用 scope 创建路由作用域,可以设置一些路由选项,但不会自动创建命名空间前缀,通常用于分组和管理路由,而不需要引入额外的命名空间前缀。

namespace 用于创建一个嵌套的路由命名空间
它会自动创建一个带有命名空间前缀的路由

namespace :admin doresources :productsresources :orders
end
创建类似/admin/products、/admin/orders等路由

scope 用于创建一个路由作用域,但不会自动创建命名空间前缀

scope :admin doresources :productsresources :orders
end

6: 在特定条件下对模型的字段进行验证

    with_options unless: :pending? dovalidates :name, presence: truevalidates :code, presence: truevalidates :code, uniqueness: trueend# 帐号rejected状态,需要验证rejected_descvalidates :rejected_desc, presence: true, if: :rejected?# 帐号enabled expired状态,需要验证expires_atvalidates :expires_at, presence: true, if: "enabled? || state.expired?"

7: accepts_nested_attributes_for
允许父模型接受来自关联子模型的属性,并在父模型的表单中创建或更新关联子模型的记录

class Author < ApplicationRecordhas_many :booksaccepts_nested_attributes_for :books
endclass AuthorsController < ApplicationControllerdef create@author = Author.new(author_params)if @author.save# 处理成功保存的逻辑else# 处理验证失败的逻辑endendprivatedef author_paramsparams.require(:author).permit(:name, books_attributes: [:title, :publication_date])end
end

8: How Rails Finds Your Templates
Admin::GoodsController.new.send(:_prefixes) => [“admin/goods”, “admin/base”, “application”]

用于获取 Admin::GoodsController 控制器的视图模板路径前缀(prefixes)。这个前缀用于告诉Rails在哪里查找与控制器相关的视图模板文件。

在这个例子中,_prefixes 方法返回了一个数组 [“admin/goods”, “admin/base”, “application”],这意味着Rails将按照以下顺序查找视图模板文件:

  1. 先在 app/views/admin/goods 目录下查找模板文件。
    如果没有找到
  2. 继续在 app/views/admin/base 目录下查找。
  3. 在 app/views/application 目录下查找
  4. 这是一个通用的视图目录,适用于整个应用程序

9: 为什么子类都要实现self.model_name
@good 页面上使用的是统一的[:admin,@good],这样@good的model_name 才会访问路由/admin/goods/ceate

10: simple_form 下拉框内容定制显示
label_method:

<%= f.input :par, label: "话费额", collection: [1,10,20,30,50,100], label_method: ->(n){ "#{n} 元"}, include_blank: false, hint: "话费为全国全网通用" %> 

11:views路径下是否存在某个文件

 lookup_context.exists?(@good.type_name, "admin/goods/form", true) 

12: :require_new => true

在 Rails 中,子事务的 rollback 是否被父事务知晓可以通过使用 :requires_new => true 选项来控制。这个选项通常用于确保子事务的 rollback 能够传播到父事务中,从而影响父事务的执行。

13: 重定向路由并且传递常数

resources :approvals docollection do get :approved, to: "approvals#index", defaults: { filter: { state: :approved }} get :submitted, to: "approvals#index",  defaults: { filter: { state: :submitted }} end 
end

http://www.ppmy.cn/news/1141027.html

相关文章

建议收藏!混迹职场多年总结出的8大技巧!

1. 不要吃“哑巴”亏&#xff1a;不管在什么企业&#xff0c;一定要“会说话”&#xff0c;敢于表达自己&#xff0c;但是又兼顾身边人的感受&#xff0c;考虑好自己的言行将会带来的后果。良好的沟通技巧对于在职场中建立良好的人际关系和解决问题至关重要。学会倾听、表达和理…

21.6 CSS 弹性布局

1. 弹性盒子 CSS弹性盒子(Flexbox)是一种布局模型, 用于创建灵活的, 自适应的网页布局. 它的目的是在不同屏幕尺寸和设备上实现一致的布局效果.引入弹性盒布局模型的目的是提供一种更加有效的方式来对一个容器中的子元素进行排列, 对齐和分配空白空间.弹性容器通过设置display…

应用DeepSORT实现目标跟踪

在ByteTrack被提出之前&#xff0c;可以说DeepSORT是最好的目标跟踪算法之一。本文&#xff0c;我们就来应用这个算法实现目标跟踪。 DeepSORT的官方网址是https://github.com/nwojke/deep_sort。但在这里&#xff0c;我们不使用官方的代码&#xff0c;而使用第三方代码&#…

PyTorch入门之【CNN】

参考&#xff1a;https://www.bilibili.com/video/BV1114y1d79e/?spm_id_from333.999.0.0&vd_source98d31d5c9db8c0021988f2c2c25a9620 书接上回的MLP故本章就不详细解释了 目录 traintest train import torch from torchvision.transforms import ToTensor from torchvi…

商城小程序代客下单程序开发演示

一款专为传统电商、实体商家开发的商城系统小程序&#xff0c;做私域、做留存、做社交必备功能全都有。 1、丰富的营销玩法&#xff1a;拼团、秒杀、定金预售、分销、社区团购、积分商城、支付有礼等主流获客玩法都有。 2、强大的会员体系&#xff1a;普通会员、付费会员、会…

[论文笔记]Poly-encoder

引言 本文是Poly-encoder1的阅读笔记,论文题目为基于预训练模型的快速准确多句评分模型。 也是本系列第一篇基于Transformer架构的模型,对于进行句子对之间比较的任务,有两种常用的途经:Cross-encoder在句子对上进行交互完全自注意力;Bi-encoder单独地编码不同的句子。前…

回顾Softing 2023工博之旅精彩瞬间

2023年9月23日&#xff0c;为期5天的第23届中国国际工业博览会&#xff08;CIIF&#xff09;于上海国家会展中心圆满落幕。Softing作为PROFIBUS创始人之一&#xff0c;德国工业4.0的领军企业之一&#xff0c;在本次展会上向大家呈现了众多工业自动化及IT网络方面的领先产品及方…

几道web题目

总结几道国庆写的web题目 [ACTF2020 新生赛]Include1 点进去发现就一个flag.php,源代码和抓包都没拿到好东西 结合题目猜是文件包含&#xff0c;构建payload ?filephp://filter/readconvert.base64-encode/resourceflag.php 得到base64编码过的flag&#xff0c;解码即可 此题…