×

rails

rails是什么意思?rails 判断值有没有改变

admin admin 发表于2024-08-14 13:55:57 浏览6 评论0

抢沙发发表评论

大家好,rails相信很多的网友都不是很明白,包括rails是什么意思也是一样,不过没有关系,接下来就来为大家分享关于rails和rails是什么意思的一些知识点,大家可以关注收藏,免得下次来找不到哦,下面我们开始吧!

本文目录

rails是什么意思

  rails 英  n. 铁路; 扶手; 围栏; 《非正》铁路公司股票; 栏杆( rail的名词复数 );  The train left the rails but somehow forced its way back onto the line.  火车脱轨了,但总算设法回到了原来的轨道上。

rails 判断值有没有改变

Rails通过提供了ActiveModel::Dirty中的一系列方法,来很好的帮助我们解决这些问题,让我们来看看有哪些好用的方法:

首先假设我们有 Card这个模型其中有name这个属性

1. .changed? and  《attribute》_changed?

这两个方法是用于判断记录或属性是否被修改,

card = Card.firstcard.name  # =》 "克洛泽"card.changed? # =》 falsecard.name_changed? # =》 falsecard.name = "Klose"card.changed? # =》 truecard.name_changed? #=》 true

如上面代码所示,使用ActiveModel::Dirty提供的这两个方法可以很好的帮助我们,让我们知道记录或者属性是否被修改了。

2. 《attribute》_was

如果我们想知道一个属性被修改前的值的话,ActiveModel::Dirty也提供了相应的方法,那就是:

card.name = ’Klose’card.name_was # =》 ’克洛泽’

3. changes

上面我们已经知道了如何得到一个属性被修改之前的值,那么使用changes方法,我们将会得到,所有被修改的属性及其迁移值的哈希

card.name = ’Klose’card.changes # =》 {"name"=》}

changes 返回的是以被修改的属性的名字作为键,以原有值和当前值的两个元素的数组为值的哈希。以上是 Rails的ActiveModel::Dirty中提供的一组跟踪记录修改的方法,不过其中还有有一个非常重要的方法没有介绍。

4. previous_changes

在上面的例子中,当我们把记录持久化之后:

card.name = "Klose"card.changed? # =》 truecard.savecard.changed? # =》 falsecard.name_changed?  #=》 false

如你所见,changed?和其他的方法并不能跟踪已经持久化的记录,不过ActiveModel::Dirty中还是提供了previous_changes这个方法,它能够让我们在记录已经被持久化后还能知道记录是否被修改,以及修改之前的值:

card.name = "Klose"card.savecard.previous_changes # =》 {"name"=》}

previous_changes可以返回,记录被持久后,哪些值被修改了以及修改前后的值,还有修改时间,如果记录没有被改变的话,返回的是一个空的Hash。

这个方法的一个非常常见的使用场景就是,使用after_update回调来进行,对记录修改后的通知功能。

class Card 《 ActiveRecordafter_update :notify_if_name_changedprivate  def notify_if_name_changednotify.call if self.previous_changes  endend

当然其实这里还有另外一个方法,去实现记录修改后的通知功能,而且不使用previous_changes。

class Card 《 ActiveRecordaround_update :notify_if_name_changedprivate  def notify_if_name_changedchanged = self.name_changed?    yieldnotify.call if changed  endend

这个解决办法中,我们使用了环绕回调方法, 该方法是被用yield分隔的两部分

  • 在yield之前的代码或者发生修改之前执行

  • 而在yield之后是修改已经发生后执行的

  • 那么yield其实就是触发这个修改动作的标识,并且因为同在一个方法中被分隔的两部分的变量是在同一作用于下的,因此我们就可以使用它实现改成的功能了。

  • 作者:falm
  • ***隐藏网址***
  • 来源:简书
  • 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

ruby on rails 中的dependent: :destroy 什么意思

一对一关联关系可能存在于象订单和发票这样的关系,一个订单只能有一个发票,在Rails中,我们这样指明:

class Order 《 ActiveRecord::Basehas_one :invoice,:dependent =》 :destroy --级联删除,表示组合关系,:nullify 表示聚合关系. . .class Invoice 《 ActiveRecord::Basebelongs_to :order. . .订单和条目之间的关系为一对多,我们这样声明:class Order 《 ActiveRecord::Basehas_many :line_items. . .class LineItem 《 ActiveRecord::Basebelongs_to :order

rails是什么品牌

rails是来自加州的衬衫品牌。rails的衬衫款式多样特别,充满清新的气息,很受大众的青睐。衬衫是一种穿在内外上衣之间、也可单独穿用的上衣,男衬衫通常胸前有口袋,袖口有袖头。中国周代已有衬衫,称中衣,后称中单。汉代称近身的衫为厕牏。宋代已用衬衫之名。现称之为中式衬衫。公元前16世纪古埃及第18王朝已有衬衫,是无领、袖的束腰衣。14世纪诺曼底人穿的衬衫有领和袖头。16世纪欧洲盛行在衬衫的领和前胸绣花,或在领口、袖口、胸前装饰花边。18世纪末,英国人穿硬高领衬衫。

rails activerecord是什么意思

Rails支持三种表间关联关系,一对一,一对多,多对多,你需要在Model中加入声明来标识这些关联:has_one,has_many,belongs_to,has_and_belongs_to_many。一对一关联关系可能存在于象订单和发票这样的关系,一个订单只能有一个发票,在Rails中,我们这样指明:class Order 《 ActiveRecord::Basehas_one :invoice,:dependent =》 :destroy --级联删除,表示组合关系,:nullify 表示聚合关系. . .class Invoice 《 ActiveRecord::Basebelongs_to :order. . . 订单和条目之间的关系为一对多,我们这样声明:class Order 《 ActiveRecord::Basehas_many :line_items. . .class LineItem 《 ActiveRecord::Basebelongs_to :order. . . 声明多对多关系时,一般是这样的:class Teacher has_and_belongs_to_many :students end class Student has_and_belongs_to_many :teachers end但有时我们需要利用中间表,并让它映射到一个模型,多对多 可以改成两个 一对多。那么,可以这样来声明模型之间多对多的关联:class Teacher has_many :relations has_many :students, :through =》 :relations end class Relation belongs_to :teacher belongs_to :student end class Student has_many :relations has_many :teachers, :through =》 :relations endclass Person 《 ActiveRecord::Base end class Customer 《 Person has_many :orders end

如何在Rails中建立后台管理页面

建立Controller相信看这篇文章的朋友,应该都知道,Controller相关的文件都放在了 %Rails_Root%/app/controllers/ 目录下,为了和普通的Controller区分,我们在 %Rails_Root%/app/controllers/ 下新建一个目录 admin ,用于专门存放后台管理页面相关的Controller。建立基本的Controller也行大家都看过普通的Controller类的实现,都需要继承 ApplicationController ,把Controller的基本功能都继承下来。为了让后台管理页面使用不同的布局文件,其实我们只需要在Controller类定义中,调用一下 layout 方法即可。Rails中一个重要原则就是DRY。所以,为了减少代码重复,不在每一个后台管理相关的Controller中重复调用layout方法,我们建立一个后台的基础类。代码如下:# %Rails_Root%/app/controllers/admin/base_controller.rb class Admin::BaseController 《 ApplicationController layout ’admin/application’end这里需要特别说明一下的是,为了防止和其他普通的Controller重名,也为了便于识别和管理,我们将后台管理相关的Controller都放到了 Admin 命名空间里。建立登录Controller建立完基础的Controller后,我们再来建立一个和登录相关的Controller。代码如下:# %Rails_Root%/app/controllers/admin/sessions_controller.rbclass Admin::SessionsController 《 Admin::BaseController # 登录 def new endend配置Routes***隐藏网址***# %Rails_Root%/config/routes.rb SampleApp::Application.routes.draw do namespace :admin do resources :sessions, only: match ’/signin’, to: ’sessions#new’, via: ’get’ endend我的工程命是 SampleApp ,你的工程名字也行和我的不一样。所以,代码也有稍有差异。添加模板建立完路由规则,再刷新页面,页面报错,错误如下:Missing template layouts/admin/application with {:locale=》}.这是提示我们确实模板文件。另外,有木有感觉 admin/application 有点眼熟?我们在 Admin::BaseController 类中调用layout事,传递的参数就是这个。建立布局文件根据上面的分析,我们需要在 %Rails_Root%/app/views/layouts/admin/ 目录下,新建一个名为 application.html.erb 的文件。代码如下:《!-- %Rails_Root%/app/views/layouts/admin/application.html.erb --》《h1》This is Admin pages.《/h1》《hr /》《%= yield %》这里将布局文件命名为 application.html.erb ,是为了和Rails生成的默认布局文件保持一致。从这里也能看出来,在Controller中调用layout方法,其实就是指名了寻找布局文件的路径,并且默认的根目录是 %Rails_Root%/app/views/layouts/ 。建立视图模板文件创建完布局文件,我们再次刷新浏览器。还是报错,提示错误信息如下:Missing template admin/sessions/new, admin/base/new, application/new with {:locale=》}.根据我们对Rails的MVC的了解,可以一样看出来,我们需要创建 new.html.erb 。代码如下:《!-- %Rails_Root%/app/views/admin/sessions/new.html.erb --》 This is login page.Please login.***隐藏网址***终极解决方案解决后台管理页面创建的终极解决方案是: active_admin 。据网友评论说,有了 ActiveAdmin,创建 Rails 应用的管理界面就像儿戏。你会有一个很好的仪表盘,图形化 CRUD 界面以及更多东西。非常灵活且可客制化。刚刚开始整的时候,出了点问题。所以,D瓜哥就在 Ruby China 上发帖 “active_admin 兼容 Rails 4 吗?” 询问了一下。感谢网友的回答,让我顺利过关。由于Rails 4刚刚推出,不知道active_admin的有没有发布可以兼容Rails 4的官方包。所以,在 Gemfile 文件中声明gem包的时候,必须指定一下它的来源和分支。另外,还有声明一些依赖的gem。具体声明如下:# %Rails_Root%/Gemfilegem ’activeadmin’, github: ’gregbell/active_admin’, branch: ’rails4’gem ’ransack’, github: ’ernie/ransack’, branch: ’rails-4’gem ’inherited_resources’, github: ’josevalim/inherited_resources’gem ’formtastic’, github: ’justinfrench/formtastic’# 请注意:active_admin的rails 4分支,要求使用3.0版本以上的jquery-rails gem。# 所以,要检查一下jquery-rails的版本。gem ’jquery-rails’, ’3.0.4’然后,使用如下命令更新、安装一下gem包:bundle updatebundle install相信一些朋友和我一样,对这两个命令都很好奇,也很纳闷,有啥区别呢?D瓜哥在网上找了两篇文章,希望能给这些朋友“传道授业解惑”:bundle update 和 bundle install平时大家用哪个?Why you should run bundle update升级完gem包后,允许如下命令,生成后台页面:rails generate active_admin:install这个命令会创建一个初始化的管理页面,并且创建 %Rails_Root%/app/admin 目录,用于存放管理相关的配置信息。下一步,进行数据库迁移。执行如下命令:rake db:migrate完成数据库迁移之后,执行如下命令,启动服务器:rails server***隐藏网址***User : admin@example.comPassword : password现在,虽然有了后台管理页面,但是我们需要管理的各种东西都没有。所以,这个必须得加进来。执行命令如下:rails generate active_admin:resource 这条命令会在 %Rails_Root%/app/admin 目录下生成 my_model_names.rb ,用于配置资源信息。这时,刷新一下浏览器,顶部菜单栏是不是多了个选项?这样搞,实在是太爽太方便了!Rails真实太TM好玩了:怎一个爽字了得啊?!自我吐槽有两个地方需要特别声明一下:代码段的第一行为文件路由;有些地方需要建立一些文件夹,请各位看文章时候注意。特别感谢这篇文章,部分内容参考了active_admin的官方文档。特别感谢!

rails怎么连接mysql

rails怎么连接mysql1、通过命令创建项目的时候加上参数 -d,如rails new 项目名称 -d mysql2、上述命令执行完后,rails 会自动安装 mysql2这个gem,同时会把该Gem加入到你的Gemfile文件中。3、接着把database.xml中对于数据库的配置信息按照实际情况进行配置4、执行rake db:create 命令创建数据库,即可

rails中执行rake db:migrate后出现错误

rails的确是来的方便,一个rails generate scaffold命令下来就可以生成view、controller和model的所有文件,然后再执行rake db:migrate就可以生成相应的数据库表结构。而就是这个简单的rake db:migrate却产生了预想不到的问题: 首先交代一下背景:rails创建项目时,默认使用了SQLite数据库。为了快速上手,我换成了MySQL,也修改了相应的配置文件config/database.yml。 第一个问题: rake aborted! uninitialized constant www.hbbz08.com Rake:DSL 原因:默认安装的rake版本过低,不兼容 解决办法:升级rake 步骤:1. 安装0.9.2版本的rake,gem install rake -version=0.9.2 2. 卸载原来版本(可以通过gem -list rake查看当前安装的版本), gem uninstall rake -version=0.8.7 3. 更新所有组件,bundle update 4.运行 rake db:migrate。于是出现第二个问题。 第二个问题: rake aborted! Mysql::Error: query: not connected: SHOW TABLES 原因:MySQL5.1自带的libmySQL.dll和当前的rails不兼容 解决办法:使用旧版本替换。 步骤:1. 下载旧版本的libmySQL.dll: ht/instantrails.rubyforge.org/svn/trunk/InstantRails-win/InstantRails/mysql/bin/libmySQL.dll 2. 将下载的文件放到%RUBY_HOME/bin目录下。

关于rails,rails是什么意思的介绍到此结束,希望对大家有所帮助。