0

1.やりたいこと。

ユーザーが既に参加しているグループに投稿されたメッセージをタイムラインに表示したい.as 他のユーザーが投稿したメッセージは、グループのメンバーである限り含まれます。

2.私がしたこと。

(show.html.erb-members)

<h1>Mypage</h1>
 <div id="timeline">
  <%= @timelines.each do |tl|%>
   <div class="message_area">
   <p class= "member_name"><a href="/members/<%= tl.member %>">
   <%= tl.member.name %></a></p>
   <p class="message_content"><%= tl.content %></p>
   <p class="message_create">(<%= tl.created_at.strftime'%Y-%m-%d %H:%M' %>)
   </p></div>
<% end %>
</div>

(members.controller.erb)

def show
  if !checklogin? then return end
   @me = me?
   @member = Member.find(params[:id])
   @timelines = []
   @timelines = @member.groups.each{|group| group.group_messages}

(メンバー.rb)

class Member < ActiveRecord::Base
 attr_accessible :admin, :mail, :memo, :name, :pass, :user

 has_many :friends
 has_many :messages
 has_many :comments
 has_many :group_in_members, :dependent => :destroy
 has_many :groups, :through => :group_in_members
end

(group.rb)

class Group < ActiveRecord::Base
 attr_accessible :admin, :memo, :name
 has_many :group_in_members, :dependent => :destroy
 has_many :members, :through => :group_in_members
 has_many :group_messages
end

(group_message.rb)

class GroupMessage < ActiveRecord::Base
 attr_accessible :content, :member_id, :group_id
  belongs_to :member
  belongs_to :group
end

3.エラー

NoMethodError in Members#show

Showing /Users/******/******/****/app/views/members/show.html.erb    where line #32 raised:

undefined method `member' for #<Group:0x007fac639e2c00>
Extracted source (around line #32):

29: <div id="timeline"> 
30:  <%= @timelines.each do |tl|%>
31:   <div class="message_area">
32:   <p class= "member_name"><a href="/members/<%= tl.member %>">
33:    <%= tl.member.name %></a></p>
34:   <p class="message_content"><%= tl.content %></p>
35:   <p class="message_create">(<%= tl.created_at.strftime'%Y-%m-%d %H:%M' %>)
4

1 に答える 1

0

これは古典です!

使いeachたいところに使ったmap

@timelines = @member.groups.each{|group| group.group_messages}

groups 配列も同様です。これ@timelinesはそれぞれの戻り値であるため、それ自体を返すだけです。

物事を適切にデバッグする方法を知っていれば、これは明らかだったでしょう。

簡単なことは、作業しようとしている現在のオブジェクトが何であるかを調べるために使用<%= debug tl %>または使用することです。inspect

于 2013-10-06T13:59:07.217 に答える