我有3个型号如下。
项目模型
window.onload = function(){
var bsDiv = document.getElementById("box");
var x, y;
// On mousemove use event.clientX and event.clientY to set the location of the div to the location of the cursor:
window.addEventListener('mousemove', function(event){
x = event.clientX;
y = event.clientY;
if ( typeof x !== 'undefined' ){
bsDiv.style.left = x + "px";
bsDiv.style.top = y + "px";
}
}, false);
}
</script>
和成分模型
class Item < ApplicationRecord
belongs_to :item_type, :class_name=>ItemType, :foreign_key=>"item_type_id"
end
和recipe_ingredients的模型
class Ingredient < ApplicationRecord
validates_presence_of :ingredient, :message=>"name cannot be blank!"
end
成分表有以下栏目
class RecipeIngredient < ApplicationRecord
belongs_to :item, :class_name=>Item, :foreign_key=>"item_id"
belongs_to :ingredient, :class_name=>Ingredient, :foreign_key=>"ingredient_id"
validates_numericality_of :quantity
end
配方成分指数的视图如下。成分出现在视图中。我想从配料表中取出所选配料的配方单元并将其显示在表格中。我试过它做一个查询。代码如下。
"id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,
"ingredient" varchar,
"inventory_unit" varchar,
"recipe_unit" varchar,
"created_at" datetime NOT NULL,
"updated_at" datetime NOT NULL
但我得到的输出如下图所示。
答案 0 :(得分:1)
好的,它显示的是因为你显示的是整个类,而不是实例的实际细节。
在下面的这种情况下,您选择了一整套成分(该集合仅包含一种成分,但它将始终返回一组):
Ingredient.select('recipe_unit').where(:id => @ingredient_id)
你可能想要的是这样的:
Ingredient.find(@ingredient_id).recipe_unit
差异:
find
或first
(或类似的方法)。select
告诉Rails从数据库中取出什么...它不告诉模板在模板中显示什么。它说“只从db中获取recipe_unit
列”它没有说and then output the
recipe_unit column
- 因为你需要在成分上实际调用recipe_unit
方法(如我给出的例子)。 请注意,recipe_ingredient.item
存在同样的问题
您要显示项目中的哪一列?它是否有name
或description
,如果是这样的话 - 您需要实际调用它,例如:
<%= recipe_ingredient.item.name %>
答案 1 :(得分:1)
首先,由于convention over configuration,您可能会忽略模型中的:class_name
和:foreign_key
- 您的模型的名称与您列出的类和外键完全相同。
至于你的问题,你需要使用yak shaving:
recipe_ingredient.ingredient.recipe_unit
答案 2 :(得分:1)
您只需输入以下内容:
recipe_ingredient.ingredient.recipe_unit
由于RecipeIngredient
属于Ingredient
,您可以访问Ingredient
的{{1}},就像它是这样的任何其他字段一样:
RecipeIngredient
获得成分后,您可以通过输入以下内容直接拉出recipe_unit:
recipe_ingredient.ingredient
您可以在模型类中省略关联性规则中的recipe_ingredient.ingredient.recipe_unit
和:class_name
哈希值。例如,参加这个课程:
:foreign_key
按照惯例,rails会将Student类与Course类相关联。 Rails将在&#34;学生&#34;中寻找专栏。标有&#34; course_id&#34;的数据库表,以及&#34; course_id&#34;作为表中的列存在,Rails将自动使用该字段作为Student的外键。如果要覆盖rails中的默认约定,可以使用class Student < ActiveRecord::Base
belongs_to Course
end
表示法(除非严格要求,否则不建议这样做)。
有关活动记录迁移和外键关联主题的更多阅读,您可以查看rails docs。