新手问题在这里!我正在构建一个简单的应用程序,允许用户创建和接受挑战。我想在一个页面上列出所有挑战,以及用户已接受的挑战。我在做后者时遇到了一些麻烦,因为我无法在我的视图中提取用户已接受的挑战的名称。
我的架构如下所示:
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并获取用户已接受的挑战的名称。有什么想法吗?
答案 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 %>