轨。在输出时将用户对象注入消息对象

时间:2011-05-03 13:22:21

标签: ruby-on-rails-3

我正在开发一个Rails 3 API,在这个API中,我得到了一个名为users,messages和contacts的表。联系表由两个主要字段(user_id和friend_id)组成。消息表由两个主要列(user_id,message)

组成

我想获取属于用户联系人的所有邮件。使用下面的代码可以正常工作。我需要的是将用户数据包含在每个消息输出中。

这是我在消息控制器中的代码:

def profile_updates
  @contacts = current_user.contacts
  @messages = Array.new
  @contacts.each do |contact|
    user = User.find(contact.friend_id)
    user.messages.each do |message|
      @messages << message
    end
  end
  respond_to do |format|
    format.html { render :text => 'Use either JSON or XML' }
    format.json { render :json => @messages}
    format.xml { render :xml => @messages}
  end
end

如何做到这一点?

1 个答案:

答案 0 :(得分:1)

假设消息属于用户,您应该能够这样做:

respond_to do |format|
  format.html { render :text => 'Use either JSON or XML' }
  format.json { render :json => @messages.to_json(:include => :user) }
  format.xml { render :xml => @messages.to_json(:include => :user) }
end

要仅包含特定的用户字段,您可能需要定义自定义方法:

class Message
  def user_info
    {:first_name => user.first_name, :last_name => user.last_name}
  end
end

respond_to do |format|
  format.html { render :text => 'Use either JSON or XML' }
  format.json { render :json => @messages.to_json(:methods => :user_info) }
  format.xml { render :xml => @messages.to_json(:methods => :user_info) }
end