ユーザーに時間制限のあるチャレンジを設定するアプリがあります。各ユーザーは、1 つ以上の課題に関連付けられています。結合テーブルを介して接続するようにモデルをセットアップしました。それは問題なく動作しますが、ビュー レベルで問題が発生しています。チャレンジのインデックス ビューには、チャレンジ モデルとユーザー モデルのデータが表示されます。しかし、ビューでユーザーの名前を表示する必要がある場所に、「ユーザー」と表示されているだけです。「ユーザー」をクリックすると、そのユーザーの正しい「表示」ページが表示されます。したがって、リンクは正常に機能しますが、ユーザーの名前が表示されません。代わりに、クラス名を表示するだけです。理由はありますか?
ビューのコードは次のとおりです。直下のファイルは、views/challenges/index.html.erb です。
<%- model_class = Challenge.new.class -%>
<h1><%=t '.title', :default => model_class.model_name.human.pluralize %></h1>
<table class="table table-striped">
<thead>
<tr>
<th><%= model_class.human_attribute_name(:date) %></th>
<th><%= model_class.human_attribute_name(:time) %></th>
<th><%= model_class.human_attribute_name(:rider) %></th>
<th><%=t '.actions', :default => t("helpers.actions") %></th>
</tr>
</thead>
<tbody>
<% @challenges.each do |challenge| %>
<tr>
<td><%= link_to challenge.date, challenge_path(challenge) %></td>
<td><%= link_to challenge.duration, challenge_path(challenge) %></td>
<td><%= link_to challenge.users.name, user_path(challenge) %></td>
</tr>
<% end %>
</tbody>
</table>
そして、ここに関連するモデルがあります。チャレンジ.rb
class Challenge < ActiveRecord::Base
attr_accessible :date, :duration, :user
has_many :user_challenges
has_many :users, :through => :user_challenges
validates_presence_of :date, :duration
def self.winner
Challenge.find(:first, :order => "duration desc")
end
end
ユーザー.rb
class User < ActiveRecord::Base
attr_accessible :name, :email
has_many :user_challenges
has_many :challenges, :through => :user_challenges
validates_presence_of :name, :email
validates_uniqueness_of :email
def self.find_or_create(name, email)
user = User.find_by_email(email)
if user.present?
user.challenge = challenge
user.save
else
User.create(:name => name, :email => email)
end
end
end
結合テーブル、別名 User_challenge.rb
class UserChallenge < ActiveRecord::Base
belongs_to :challenge
belongs_to :user
end