我有一个Student
模型has_many
CustomField
(多态)行。在rails控制台中向学生添加了几个CustomFields
之后,我启动了一个rails服务器并导航到应该显示此信息的页面,但是它没有显示任何更新的信息。
我有一个方法get_custom_fields_with_values
,它返回一个Hash of field names和values。
在rails控制台中:
student = Student.all.first
field_attrs = FieldAttributes.create(name: 'Favorite Color') # => true
student.custom_fields.build(field_attributes: field_attrs, value: 'Blue').save # => true
student.get_custom_fields_with_values # => { 'Favorite Color' => 'Blue' }
但是,在我调用get_custom_fields_with_values
时的视图中,返回的所有内容都是空哈希。
我正在使用Postgres数据库,并检查其中的数据显示所有行都在那里,并且所有外键都是正确的。
这是在请求页面时进行的查询:
CustomField Load (0.3ms) SELECT "custom_fields".* FROM "custom_fields"
WHERE "custom_fields"."custom_fieldable_id" = $1
AND "custom_fields"."custom_fieldable_type" = $2
[["custom_fieldable_id", "34df8e09-148d-5660-bb6c-dd5ca7c9e0ff"],
["custom_fieldable_type", "Student"]]
数据库行:
我多次重启服务器,仍然只获取空哈希或空ActiveRecord::CollectionProxy
对象。但是,重新启动控制台后,它能够正确检索字段,然后我得到预期的Hash。运行加载页面时运行的查询也会返回预期的行为。
我已经清除了浏览器缓存,重新启动了浏览器,并尝试了多个浏览器以达到同样的效果。多次重启服务器,并多次重启控制台。
HAML:
= bootstrap_panel do |panel|
- panel.content = capture do
.panel-heading
%h2 Custom Fields
.panel-body
= @student.get_custom_fields_with_values
功能:
def get_custom_fields_with_values
custom_fields.inject(Hash.new) do |h, cf|
field_name = cf.field_attributes.name
h[field_name] = cf.value; h
end
end
所有这些都显示在面板正文中:
{}
但是控制台中的方法调用返回:
student.get_custom_fields_with_values
=> {"Favorite Car"=>"Prius", "Favorite Color"=>"Blue"}
配置/ database.yml的
default: &default
adapter: postgresql
database: <%= Rails.application.secrets.database %>
host: <%= Rails.application.secrets.database_host %>
username: <%= Rails.application.secrets.database_username %>
password: <%= Rails.application.secrets.database_password %>
port: 5432
pool: 10
development:
<<: *default
test:
<<: *default
staging:
<<: *default
production:
<<: *default
解决
问题是我的数据库是多租户的,而且铁路看着错误的租户。我将它添加到排除的模型中,以便公开查看,并解决了问题。
答案 0 :(得分:0)
问题是我的数据库是多租户的,因此当应该查看公共模式时,rails正在查看当前模式。我刚刚将CustomFields模型添加到排除列表中,因此rails将查看公共模式并解决了我的问题。