首页 > 解决方案 > 有条件地包含属性是创建方法 - 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引发错误,因此是.@usernil

标签: ruby-on-railsrubyruby-on-rails-5

解决方案


您忘记了.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

推荐阅读