0

我有一个为用户设置定时挑战的应用程序。每个用户都与一个或多个挑战相关联。我已经设置了模型,以便它们通过连接表连接。效果很好,但是我的视图级别有问题。在挑战的索引视图中,显示来自挑战模型和用户模型的数据。但是视图应该显示用户名的地方,它只是显示“用户”。如果您单击“用户”,您将被带到该用户的正确“显示”页面。所以链接工作正常,但我无法显示用户名。相反,我只是让类名出现。知道为什么吗?

这是视图的代码。下面的文件是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

challenge.users是一个集合,.name是一个 ruby​​ 方法,它为您提供类的名称:

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

将属性称为其他名称(用户名)。

另外,什么时候可以(应该是哪个用户路径?)user_path(challenge)真的没有意义。Challengehave_many :users

于 2012-05-10T20:55:01.410 回答
1

我认为用户列表是空的,这就是 users.first.username 为 nil 的原因。user_path(challenge) '似乎' 像它的工作,但它可能总是把你带到 users/challenge_id 路径,这不是你想要的。

很可能某些东西没有为您正确保存。验证您的用户列表不为空。跳入控制台并测试数据的保存和重新加载

于 2012-05-11T15:07:03.337 回答