Rails视图不显示更新的数据库信息,在rails console

时间:2016-05-27 17:49:36

标签: ruby-on-rails ruby postgresql

我有一个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"]]

数据库行:

database rows

我多次重启服务器,仍然只获取空哈希或空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

解决

问题是我的数据库是多租户的,而且铁路看着错误的租户。我将它添加到排除的模型中,以便公开查看,并解决了问题。

1 个答案:

答案 0 :(得分:0)

问题是我的数据库是多租户的,因此当应该查看公共模式时,rails正在查看当前模式。我刚刚将CustomFields模型添加到排除列表中,因此rails将查看公共模式并解决了我的问题。

相关问题