rails 之 attr_accessible 与 attr_accessor

本文详细解析了Rails框架中的attr_accessible和attr_accessor方法。attr_accessible用于将实例变量放入massassignment的白名单中,attr_accessor则创建虚拟属性,它们在内存范围内操作但不与数据库直接关联。正确理解并应用这两个方法对于避免潜在的安全风险和提高代码效率至关重要。
就在刚刚被这两个东西卡住了一个小时,现在总结这点小知识

attr_accessible 是一个rails方法,它可以放实例变量进一个mass assignmen
在attr_accessible之后的属性,进入了白名单,有默认的get,set方法,但是这些属性,必须在schema里面存在它们的名字,就是说要migrate添加到数据库的表里面,可以通过CRUD来操作这些属性在数据库的值
我犯的错误就是没有migrate进数据库就想在console使用和test,所以就卡住了

attr_accessor是一个ruby方法
attr_accessor被修饰的属性,被称为虚拟属性,它跟数据库没有关系,它只存在memory的scope,他也是有get,set方法,但是你要注意一点就是在console里面new出对象时返回的对象数据列表中是看不到这些属性的,因为console只显示的是你schema的字段,虚拟属性没有在其里面,所以看不到,你可以用respon_to?方法去判断属性是否可以new出来

知识是一点一点积累出来,断断续续也是学。
E:/Bitnami/redmine-5.0.3-0/ruby/bin/ruby.exe -x E:\Bitnami\redmine-5.0.3-0\apps\redmine\htdocs\bin\bundle exec E:\Bitnami\redmine-5.0.3-0\ruby\bin\ruby.exe E:/Bitnami/redmine-5.0.3-0/apps/redmine/htdocs/bin/rails server -b 127.0.0.1 -p 3000 -e development Beginning in Rails 4, Rails ships with a `rails` binstub at ./bin/rails that should be used instead of the Bundler-generated `rails` binstub. If you are seeing this message, your binstub at ./bin/rails was generated by Bundler instead of Rails. You might need to regenerate your `rails` binstub locally and add it to source control: rails app:update:bin # Bear in mind this generates other binstubs # too that you may or may not want (like yarn) If you already have Rails binstubs in source control, you might be inadvertently overwriting them during deployment by using bundle install with the --binstubs option. If your application was created prior to Rails 4, here's how to upgrade: bundle config --delete bin # Turn off Bundler's stub generator rails app:update:bin # Use the new Rails executables git add bin # Add bin/ to source control You may need to remove bin/ from your .gitignore as well. When you install a gem whose executable you want to use in your app, generate it and add it to source control: bundle binstubs some-gem-name git add bin/new-executable E:/Bitnami/redmine-5.0.3-0/apps/redmine/htdocs/vendor/bundle/ruby/2.6.0/gems/activerecord-6.1.7/lib/active_record/dynamic_matchers.rb:22:in `method_missing': undefined method `attr_accessible' for Tag (call 'Tag.connection' to establish a connection):Class (NoMethodError) Did you mean? attr_accessor from E:/Bitnami/redmine-5.0.3-0/apps/redmine/htdocs/vendor/bundle/ruby/2.6.0/gems/acts-as-taggable-on-2.0.4/lib/acts_as_taggable_on/tag.rb:4:in `<class:Tag>' from E:/Bitnami/redmine-5.0.3-0/apps/redmine/htdocs/vendor/bundle/ruby/2.6.0/gems/acts-as-taggable-on-2.0.4/lib/acts_as_taggable_on/tag.rb:1:in `<top (required)>' from E:/Bitnami/redmine-5.0.3-0/apps/redmine/htdocs/vendor/bundle/ruby/2.6.0/gems/activesupport-6.1.7/lib/active_support/dependencies.rb:332:in `require' from E:/Bitnami/redmine-5.0.3-0/apps/redmine/htdocs/vendor/bundle/ruby/2.6.0/gems/activesupport-6.1.7/lib/active_support/dependencies.rb:332:in `block in require' from E:/Bitnami/redmine-5.0.3-0/apps/redmine/htdocs/vendor/bundle/ruby/2.6.0/gems/activesupport-6.1.7/lib/active_support/dependencies.rb:299:in `load_dependency' from E:/Bitnami/redmine-5.0.3-0/apps/redmine/htdocs/vendor/bundle/ruby/2.6.0/gems/activesupport-6.1.7/lib/active_support/dependencies.rb:332:in `require' from E:/Bitnami/redmine-5.0.3-0/apps/redmine/htdocs/vendor/bundle/ruby/2.6.0/gems/acts-as-taggable-on-2.0.4/lib/acts-as-taggable-on.rb:16:in `<top (required)>' from E:/Bitnami/redmine-5.0.3-0/ruby/lib/ruby/gems/2.6.0/gems/bundler-2.2.27/lib/bundler/runtime.rb:60:in `require' from E:/Bitnami/redmine-5.0.3-0/ruby/lib/ruby/gems/2.6.0/gems/bundler-2.2.27/lib/bundler/runtime.rb:60:in `block (2 levels) in require' from E:/Bitnami/redmine-5.0.3-0/ruby/lib/ruby/gems/2.6.0/gems/bundler-2.2.27/lib/bundler/runtime.rb:55:in `each' from E:/Bitnami/redmine-5.0.3-0/ruby/lib/ruby/gems/2.6.0/gems/bundler-2.2.27/lib/bundler/runtime.rb:55:in `block in require' from E:/Bitnami/redmine-5.0.3-0/ruby/lib/ruby/gems/2.6.0/gems/bundler-2.2.27/lib/bundler/runtime.rb:44:in `each' from E:/Bitnami/redmine-5.0.3-0/ruby/lib/ruby/gems/2.6.0/gems/bundler-2.2.27/lib/bundler/runtime.rb:44:in `require' from E:/Bitnami/redmine-5.0.3-0/ruby/lib/ruby/gems/2.6.0/gems/bundler-2.2.27/lib/bundler.rb:174:in `require' from E:/Bitnami/redmine-5.0.3-0/apps/redmine/htdocs/config/application.rb:18:in `<top (required)>' from E:/Bitnami/redmine-5.0.3-0/apps/redmine/htdocs/vendor/bundle/ruby/2.6.0/gems/activesupport-6.1.7/lib/active_support/dependencies.rb:332:in `require' from E:/Bitnami/redmine-5.0.3-0/apps/redmine/htdocs/vendor/bundle/ruby/2.6.0/gems/activesupport-6.1.7/lib/active_support/dependencies.rb:332:in `block in require' from E:/Bitnami/redmine-5.0.3-0/apps/redmine/htdocs/vendor/bundle/ruby/2.6.0/gems/activesupport-6.1.7/lib/active_support/dependencies.rb:299:in `load_dependency' from E:/Bitnami/redmine-5.0.3-0/apps/redmine/htdocs/vendor/bundle/ruby/2.6.0/gems/activesupport-6.1.7/lib/active_support/dependencies.rb:332:in `require' from E:/Bitnami/redmine-5.0.3-0/apps/redmine/htdocs/vendor/bundle/ruby/2.6.0/gems/railties-6.1.7/lib/rails/commands/server/server_command.rb:138:in `block in perform' from E:/Bitnami/redmine-5.0.3-0/apps/redmine/htdocs/vendor/bundle/ruby/2.6.0/gems/railties-6.1.7/lib/rails/commands/server/server_command.rb:135:in `tap' from E:/Bitnami/redmine-5.0.3-0/apps/redmine/htdocs/vendor/bundle/ruby/2.6.0/gems/railties-6.1.7/lib/rails/commands/server/server_command.rb:135:in `perform' from E:/Bitnami/redmine-5.0.3-0/apps/redmine/htdocs/vendor/bundle/ruby/2.6.0/gems/thor-1.2.1/lib/thor/command.rb:27:in `run' from E:/Bitnami/redmine-5.0.3-0/apps/redmine/htdocs/vendor/bundle/ruby/2.6.0/gems/thor-1.2.1/lib/thor/invocation.rb:127:in `invoke_command' from E:/Bitnami/redmine-5.0.3-0/apps/redmine/htdocs/vendor/bundle/ruby/2.6.0/gems/thor-1.2.1/lib/thor.rb:392:in `dispatch' from E:/Bitnami/redmine-5.0.3-0/apps/redmine/htdocs/vendor/bundle/ruby/2.6.0/gems/railties-6.1.7/lib/rails/command/base.rb:69:in `perform' from E:/Bitnami/redmine-5.0.3-0/apps/redmine/htdocs/vendor/bundle/ruby/2.6.0/gems/railties-6.1.7/lib/rails/command.rb:48:in `invoke' from E:/Bitnami/redmine-5.0.3-0/apps/redmine/htdocs/vendor/bundle/ruby/2.6.0/gems/railties-6.1.7/lib/rails/commands.rb:18:in `<top (required)>' from E:/Bitnami/redmine-5.0.3-0/apps/redmine/htdocs/vendor/bundle/ruby/2.6.0/gems/railties-6.1.7/lib/rails/app_loader.rb:59:in `require' from E:/Bitnami/redmine-5.0.3-0/apps/redmine/htdocs/vendor/bundle/ruby/2.6.0/gems/railties-6.1.7/lib/rails/app_loader.rb:59:in `block in exec_app' from E:/Bitnami/redmine-5.0.3-0/apps/redmine/htdocs/vendor/bundle/ruby/2.6.0/gems/railties-6.1.7/lib/rails/app_loader.rb:48:in `loop' from E:/Bitnami/redmine-5.0.3-0/apps/redmine/htdocs/vendor/bundle/ruby/2.6.0/gems/railties-6.1.7/lib/rails/app_loader.rb:48:in `exec_app' from E:/Bitnami/redmine-5.0.3-0/apps/redmine/htdocs/vendor/bundle/ruby/2.6.0/gems/railties-6.1.7/lib/rails/cli.rb:7:in `<top (required)>' from E:/Bitnami/redmine-5.0.3-0/apps/redmine/htdocs/vendor/bundle/ruby/2.6.0/gems/railties-6.1.7/exe/rails:10:in `require' from E:/Bitnami/redmine-5.0.3-0/apps/redmine/htdocs/vendor/bundle/ruby/2.6.0/gems/railties-6.1.7/exe/rails:10:in `<top (required)>' from E:/Bitnami/redmine-5.0.3-0/apps/redmine/htdocs/bin/rails:29:in `load' from E:/Bitnami/redmine-5.0.3-0/apps/redmine/htdocs/bin/rails:29:in `<main>' Process finished with exit code 1
09-11
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值