0

ユーザーに時間制限のあるチャレンジを設定するアプリがあります。各ユーザーは、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
4

2 に答える 2

1

ユーザー リストが空だと思うので、users.first.username は nil です。user_path(challenge) は機能しているように見えますが、おそらく常に users/challenge_id パスに移動しますが、これはあなたが望むものではありません。

ほとんどの場合、何かが正しく保存されていません。ユーザー リストが空でないことを確認します。コンソールに飛び乗って、データの保存と再ロードをテストしてください

于 2012-05-11T15:07:03.337 に答える
1

challenge.usersはコレクションで.nameあり、クラスの名前を与える ruby​​ メソッドです。

ruby-1.9.2-head :002 > Object.name
 => "Object" 

属性を別のもの (ユーザー名) と呼びます。

また、canuser_path(challenge)の場合は実際には意味がありません(どのユーザー パスにする必要がありますか?)。Challengehave_many :users

于 2012-05-10T20:55:01.410 に答える