mar*_*ion 0 ruby ruby-on-rails ruby-on-rails-5
所以我试过这个:
stock = Stock.find_or_create_by(ticker: ticker, jse_link: link, name: name, price: price)
Run Code Online (Sandbox Code Playgroud)
事实证明,如果 ActiveRecord 找不到Stock匹配所有 4 个属性的对象,它会创建一个新对象。因此,如果它找到与 4 个属性中的 3 个匹配的对象,则会创建一个重复的属性。
有没有一种简单的方法,而不必使用if语句在 1 次调用中完成所有这些操作?
即我想做的是:
Stock匹配的对象ticker: ticker。Stock对象存在,那么我想更新price: price.Stock对象不存在,那么我想创建一个具有这 4 个属性 ( ticker: ticker, jse_link: link, name: name, price: price)的新对象。我可以在不使用条件语句的情况下执行上述操作吗?
您可以使用find_or_initialize_by和tap
Stock.find_or_initialize_by(ticker: ticker).tap do |stack|
stack.price = price
if stack.new_record?
stack.jse_link = link
stack.name = name
end
stack.save
end
Run Code Online (Sandbox Code Playgroud)
小智 5
我认为您需要编写 if 或 else,因为您需要创建和更新不同的参数。
stack = Stock.exists?(ticker: ticker) ? Stock.where(ticker: ticker).update(price: price) : Stock.create!(ticker: ticker, jse_link: link, name: name, price: price)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2330 次 |
| 最近记录: |