ruby-on-rails - 有条件地包含属性是创建方法 - Rails 5
问题描述
create
在(或任何method(attr, attr, attr)
样式方法)中有条件地包含属性的最佳方法是什么?
@user = User.find_by_name("Sam") # <- might not exist
Store.create(
name: "Some Store",
email: "store@example.com",
user_id: @user.id if @user.present? # <- CONCEPT ONLY - Should be added if condition is true to prevent error
)
如果未找到该行将user_id: @user.id
引发错误,因此是.@user
nil
解决方案
您忘记了.create()
' 参数是哈希的快捷方式。使哈希显式:
hash = {
name: "Some Store",
email: "store@example.com"
}
hash[:user_id] = @user.id if @user.present?
Store.create(hash)
另一种选择是传递.create
一个块:
Store.create do |s|
s.name = "Some Store"
s.email = "store@example.com"
s.user_id = @user.id if @user
end
推荐阅读
- python - Python - 对表中每一行的值进行排序,并获得一个新的 Pandas 数据框,其中每行中的原始列索引/标签按排序顺序排列
- c# - 如何控制数组中的所有游戏对象?
- elrond - 如何创建每天在同一时间执行的智能合约?
- sql - 在 SQL Server 中使用 JSON 数组代替传统的关系数据库,每个值在 1 行中
- python - 仅在特定文件运行时如何运行功能?
- python - 用日期时间计算年龄(Python)
- c++ - 类应该自己管理动态内存吗?
- javascript - 如何拥有可拖放的行列表?
- swift - UIImageView 正在混合没有 Alpha 的颜色
- emacs - Emacs按住键并按其他键完成命令(同时继续按住初始键)