Rails find_by_name 在另一个 table
Rails find_by_name on another table
我有性别并根据性别名称创建类别和子类别。
m = Gender.create(:gender => 'masculine')
c = Category.find_by_name("T-shirt", gender: m )
c.subcategories.create(:name => "Necklace" )
等等。
你可以试试这个。
m = Gender.create(:gender => 'masculine')
c = Category.where(name: "T-shirt", gender: m.gender ).first
c.subcategories.create(name: "Necklace" )
请注意,如果没有找到符合给定条件的类别,上面的代码将引发异常,因此您可以使用以下方法来避免这种情况。
m = Gender.create(:gender => 'masculine')
c = Category.where(name: "T-shirt", gender: m.gender).try(:first)
unless c.blank?
c.subcategories.create(name: "Necklace" )
end
虽然 Amit Sharma 的答案有效,但我建议对其进行一些改进。
使用新的哈希语法:
gender = Gender.create!(gender: 'masculine')
使用find_by代替where/first
category = Category.find_by(gender: gender, name: 'T-Shirt')
不检查 return 值时使用 bang 变体
category.subcategories.create!(name: 'Necklace')
使用if/present?而不是 unless/blank?
if category.present?
category.subcategories.create!(name: 'Necklace')
end
(这只是个人喜好问题。但我的大脑似乎无法解析 除非 表达式:-))
使用find_or_initialize_by/find_or_create_by!
如果要查找类别或在类别不存在时创建它,请使用 find_or_initialize/find_or_create_by!() 以避免 nil 检查:
category = Category.find_or_create_by!(gender: gender, name: 'T-Shirt')
所以总的来说我会这样写:
gender = Gender.create!(gender: 'masculine')
category = Category.find_or_create_by!(gender: gender, name: 'T-Shirt')
category.subcategories.create!(name: 'Necklace')
我有性别并根据性别名称创建类别和子类别。
m = Gender.create(:gender => 'masculine')
c = Category.find_by_name("T-shirt", gender: m )
c.subcategories.create(:name => "Necklace" )
等等。
你可以试试这个。
m = Gender.create(:gender => 'masculine')
c = Category.where(name: "T-shirt", gender: m.gender ).first
c.subcategories.create(name: "Necklace" )
请注意,如果没有找到符合给定条件的类别,上面的代码将引发异常,因此您可以使用以下方法来避免这种情况。
m = Gender.create(:gender => 'masculine')
c = Category.where(name: "T-shirt", gender: m.gender).try(:first)
unless c.blank?
c.subcategories.create(name: "Necklace" )
end
虽然 Amit Sharma 的答案有效,但我建议对其进行一些改进。
使用新的哈希语法:
gender = Gender.create!(gender: 'masculine')
使用find_by代替where/first
category = Category.find_by(gender: gender, name: 'T-Shirt')
不检查 return 值时使用 bang 变体
category.subcategories.create!(name: 'Necklace')
使用if/present?而不是 unless/blank?
if category.present?
category.subcategories.create!(name: 'Necklace')
end
(这只是个人喜好问题。但我的大脑似乎无法解析 除非 表达式:-))
使用find_or_initialize_by/find_or_create_by!
如果要查找类别或在类别不存在时创建它,请使用 find_or_initialize/find_or_create_by!() 以避免 nil 检查:
category = Category.find_or_create_by!(gender: gender, name: 'T-Shirt')
所以总的来说我会这样写:
gender = Gender.create!(gender: 'masculine')
category = Category.find_or_create_by!(gender: gender, name: 'T-Shirt')
category.subcategories.create!(name: 'Necklace')