使用:include或:join来引入相关数据?

时间:2010-11-23 06:21:03

标签: ruby-on-rails

新手问题在这里!我正在构建一个简单的应用程序,允许用户创建和接受挑战。我想在一个页面上列出所有挑战,以及用户已接受的挑战。我在做后者时遇到了一些麻烦,因为我无法在我的视图中提取用户已接受的挑战的名称。

我的架构如下所示:

create_table "challenge_lists", :force => true do |t|
t.string   "name"
t.date     "created_on"
t.datetime "created_at"
t.datetime "updated_at"
t.integer  "user_id"
end

create_table "accepted_challenges", :force => true do |t|
t.integer  "user_id"
t.integer  "challenge_list_id"
t.date     "date_accepted"
t.datetime "created_at"
t.datetime "updated_at"
end

模特/协会:

class ChallengeList < ActiveRecord::Base
has_one :user
has_many :accepted_challenges
end

class AcceptedChallenge < ActiveRecord::Base 
belongs_to :user
belongs_to :challenge_list
has_many :updates
end

控制器:

def index
@challenge_lists = ChallengeList.all
@user_challenges = current_user.accepted_challenges.find(:all, :include => :challenge_list)

respond_to do |format|
  format.html # index.html.erb
  format.xml  { render :xml => @challenge_lists }
end

我希望能够调用user_challenges.name并获取用户已接受的挑战的名称。有什么想法吗?

1 个答案:

答案 0 :(得分:0)

你非常接近,但似乎问题在于你试图获得挑战集合的名称。如果您只想提取名称,可以这样做:

>> @user_challenges.map(&:name)
=> ["name1", "name2", "name3"]

但是如果你想在你的视图中打印它,你可能会更好地使用一个块:

<h1>Challenges for: <%= current_user.name %></h1>
<% @user_challenges.each do |challenge| %>
<p><%= challenge.name %></p>
<% end %>