2016-05-27 1 views
0

です。レールコンソールの学生にCustomFieldsを追加した後、レールサーバーを起動し、この情報を表示するはずのページに移動しましたが、更新された情報は表示されません。Railsビューで更新されたデータベース情報が表示されない、レールコンソールで情報が正常に取得される<code>Student</code><code>has_many</code><code>CustomField</code>(多型)の行がある<code>Student</code>モデルを持っているコンソール

フィールド名と値のハッシュを返すメソッドget_custom_fields_with_valuesがあります。レールコンソールで

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オブジェクトです。しかし、コンソールを再起動すると、フィールドをうまく取り出すことができ、予想されるハッシュを戻すことができます。また、ページの読み込み時に実行されるクエリを実行すると、予想される動作が返されます。

私はブラウザのキャッシュをクリアし、ブラウザを再起動し、複数のブラウザをすべて同じ効果を試しました。サーバーを複数回再起動し、コンソールを複数回再起動しました。

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"} 

のconfig/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

関連するコードを掲載することはできますか? – Dbz

+0

@Dbzはそれを関連するビューコードで更新し、機能コードを追加しました。 – user2826911

+0

異なる環境でrails consoleと実際のアプリケーションを実行している可能性があります。 'rails console'を実行しているときに見ている環境は何ですか? – imechemi

答えて

0

問題は私のデータベースが複数テナントになっているため、現在のスキーマでパブリックスキーマを調べていたはずです。私は、レールがパブリックスキーマで見えるように、CustomFieldsモデルを除外リストに追加しました。

関連する問題