2017-01-21 3 views
0

私はオブジェクトにはアクセスできるが、ビュー内のプロパティにはアクセスできないという珍しい問題があります。どのような援助、指導をいただければ幸いです。Rails - オブジェクトは表示できますが、オブジェクトのプロパティは使用できません。

これは私のモデル(app/models/team_member.rb)です:

class TeamMember < ApplicationRecord 
    attr_accessor :name 
end 

これは私のコントローラ(app/controllers/static_controller.rb)です:

class StaticController < ApplicationController 
    def index 
    @team_members = TeamMember.all 
    end 
end 

これは私のシードファイル(db/seeds.rb)です:

puts 'POPULATING TEAM MEMBERS' 
team_member = TeamMember.create! :name => 'Jones Namerson' 
team_member = TeamMember.create! :name => 'John Johnson' 
team_member = TeamMember.create! :name => 'Billy Bob' 
team_member = TeamMember.create! :name => 'Tom Thompson' 

これは私の見解です(app/views/static/index.html.erb):

<div class="team-member"> 
      <a href="#bioModal1" class="portfolio-link" data-toggle="modal"> 
      <img src="http://www.canyon-news.com/wp-content/uploads/2015/09/Pope-Francis-1.jpg" class="img-responsive img-circle"> 
      <h4><%= @team_members[0] %></h4> 
      <p class="text-muted">Co-Owner</p> 
      </a> 
     </div> 

これは以下のように出力を生成しますので、

<image>THE IMAGE</image> 

#<TeamMember:0x007fdd5e08c288> 
Co-Owner 

、私は、ビュー内のオブジェクトにアクセスすることができるよしかし、私の目標は、オブジェクトのプロパティにアクセスすることです。私は、私が実際に見たいものを追加することによって、私の見解に変更を加えます:

<div class="team-member"> 
      <a href="#bioModal1" class="portfolio-link" data-toggle="modal"> 
      <img src="http://www.canyon-news.com/wp-content/uploads/2015/09/Pope-Francis-1.jpg" class="img-responsive img-circle"> 
      <h4><%= @team_members[0].name %></h4> 
      <p class="text-muted">Co-Owner</p> 
      </a> 
     </div> 

をこれが生成します。

だから、
<image>THE IMAGE</image> 

Co-Owner 

を、基本的に私のオブジェクトはビューで使用できますが、ないそのプロパティ?どんなヘルプも大歓迎です。

答えて

1

あなたのモデルでこれを持っている:

attr_accessor :name 

はまた、あなたのデータベースにname列を持っています。​​は、基本的に、このための省略形です:

def name 
    @name 
end 
def name=(s) 
    @name = s 
end 

が、ActiveRecordのは、通常、データベース・バックアップ属性のアクセサとミューテータメソッドを提供し、あなたはについては何も知らないあなた自身のnamename=方法(attr_accessor経由)を供給してきましたデータベースのname列。

TeamMemberクラスからattr_accessor :nameコールを削除すると、問題はなくなります。

+0

おかげで多くを使用して、それをテストすることをお勧めしたいです!出来た。私はこれをとてもうまく説明してくれて本当にありがとう。あなたの知識を共有してくれてありがとう –

0

TeamMemberクラスの「attr_accessor:name」は必要ありません。通常のRubyクラスとは異なり、ApplicationRecordのサブクラスを作成していますので、TeamMemberの移行が有効な限りActive Recordが処理します。

たとえば、 "rails g model MyModel my_property:string"の後に "rake db:migrate"を実行すると、Railsはアプリケーションレコードを拡張するMyModelクラスと、名前フィールドを持つmy_modelsテーブルを作成します。 MyModelクラスは、コードを追加せずにnameプロパティのアクセサーを無料で取得します。したがって、あなたがやっているようにもう一度追加すると、予期した動作が発生する可能性があります

最後に、最初のオブジェクトにアクセスしたい場合は、@team_member = TeamMember.allを@team_member = TeamMember.firstに置き換えることができます。これは単なる拡張です。

私は "レールC"

TeamMember.all 
TeamMember.first 
TeamMember.first.name 
+0

それは本当にそれをよく説明します。洞察力に感謝します。非常に感謝する –

関連する問題