我想知道,当你创建一个对象时,你通常可以在一行中设置多个属性,例如:

 @object = Model.new(:attr1=>"asdf", :attr2 => 13, :attr3 => "asdfasdfasfd")

如果我想先使用find_或create_by,然后再更改其他属性,该怎么办?通常,我必须使用多行,例如:

是否有一些方法可以使用与模型类似的哈希设置属性.新方法接受键值对吗?我对此很感兴趣,因为我可以在一行上设置多个属性,比如:

 @object = Model.find_or_create_by_attr1_and_attr2("asdf", 13)
 @object.some_method(:attr3 => "asdfasdf", :attr4 => "asdfasdf")

如果有人有任何想法,那就太好了!

推荐答案

您想使用assign_attributesupdate(这是不推荐使用的update_attributes的别名):

@object.assign_attributes(:attr3 => "asdfasdf", :attr4 => "asdfasdf")

@object.update(attr3: "asdfasdf", attr4: "asdfasdf")

如果选择update,对象将立即保存(当然,等待任何验证).

Ruby-on-rails相关问答推荐

为什么 Rails 无法启动并显示“预期在 `app/assets/config/manifest.js` (Sprockets::Railtie::ManifestNeededError) 中找到 list 文件”?

在 JS 模块中使用 Rails-UJS(带有 webpacker 的 Rails 6)

如何在 VS Code 中自动格式化 Ruby 或 .erb 文件?

Rails:ENV.fetch() 和 ENV[] 之间的区别

Rails 5:重命名表迁移

禁用冻结字符串文字注释判断

Rails 5,#

等效于 Rails 的安全导航 try for hashes

Rails:发出 POST 请求时无法验证 CSRF 令牌的真实性

rails structure.sql和schema.rb有什么区别

Redis 引发“需要 NOAUTH 身份验证”错误,但没有设置密码

如何在 Ubuntu 上使用 gem 安装 Rails

Rails 4 中的 null_session 和 reset_session 有什么区别?

RSpec:期望更改多个

ActiveRecord::Base:Class 的未定义方法 raise_in_transactional_callbacks=' (NoMethodError)

Rails 是否带有“未授权”异常?

OpenSSL::SSL::SSLError: SSL_connect SYSCALL returned=5 errno=0 state=SSLv3 read server hello A

如何从 Rails 中的枚举中获取整数值?

Rspec 3 如何测试闪存消息

如何优雅地为“嵌套”哈希符号化密钥