Rails find_by_name在另一个表上

时间:2016-04-19 19:24:57

标签: ruby-on-rails ruby ruby-on-rails-3 ruby-on-rails-4

我有性别,并且基于性别名称创建类别和子类别。

m = Gender.create(:gender => 'masculine')

c = Category.find_by_name("T-shirt", gender: m )
c.subcategories.create(:name => "Necklace" )

等等。

2 个答案:

答案 0 :(得分:2)

虽然Amit Sharma的答案有效,但我建议对其进行一些改进。

使用新的哈希语法:

var myVal = document.getElementsByName("pf1")[0].value;
childWindow.document.getElementsByName("cf1")[0].value = myVal;

使用find_by而不是where / first

gender = Gender.create!(gender: 'masculine')

不检查返回值时使用bang变体

category = Category.find_by(gender: gender, name: 'T-Shirt')

使用if / present?而不是除非/空白?

category.subcategories.create!(name: 'Necklace')

(这只是一个品味问题。但是我的大脑似乎在解析除非表达式之前有麻烦: - )

使用find_or_initialize_by / find_or_create_by!

如果你想找到类别或创建它,如果它不存在,使用find_or_initialize / find_or_create_by!(),这样你可以避免零检查:

if category.present?
  category.subcategories.create!(name: 'Necklace')
end

所以我总是这样写:

category = Category.find_or_create_by!(gender: gender, name: 'T-Shirt')

答案 1 :(得分:1)

你可以试试这个。

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