Ruby on rails 3 将特定数据发送到部分集合

Ruby on rails 3 将特定数据发送到部分集合,ruby-on-rails-3,railstutorial.org,Ruby On Rails 3,Railstutorial.org,我有一个User类,其中有许多:messages和一个Message类,该类属于:User。在消息中控制器的显示操作具有相应的视图: <% if @messages.any? %> <ol class="microposts"> <%= render partial: 'shared/message', collection: @messages %> </ol> <% end %> 我觉得以下两行应该在我在Rails

我有一个
User
类,其中
有许多:messages
和一个
Message
类,该类
属于:User
。在
消息中
控制器的显示操作具有相应的视图:

<% if @messages.any? %>
  <ol class="microposts">
    <%= render partial: 'shared/message', collection: @messages %>
  </ol>
<% end %>
我觉得以下两行应该在我在Rails教程中读到的
消息
控制器中完成:

<% user_id = message.from %>
<% user = User.find(user_id) %>

但是,我如何将每条消息对应的
值(存储user.id)传递到partial中呢

谢谢,
mike

到目前为止,我了解到您的
messages
表中有一个
from
列,其中存储
用户id
。因此,如果您调用
message.from
,它将返回
用户id
。然后您可以执行以下操作

class Message < AR::Base
     belongs_to :user, :foreign_key=>'from' 
end
现在,在您的视图中,您可以调用
message.user.name
直接获取用户名。在您的视图中根本不需要以下两行


如果我遗漏了什么,请告诉我


更新: 这是我试过的

用户模型

class User < ActiveRecord::Base
    attr_accessible :age, :name
    has_many :sent_messages,    :class_name=>'Message', :foreign_key => 'from'
    has_many :received_messages,:class_name=>'Message', :foreign_key => 'user_id'
end
#Contains Data:
#<User id: 1, name: "p1", age: 27, ... ...>, 
#<User id: 2, name: "p2", age: 25, ... ...
class Message < ActiveRecord::Base
    attr_accessible :body, :sender, :title, :receipent
    belongs_to :sender,     :class_name => 'User', :foreign_key => 'from'
    belongs_to :receipent,  :class_name => 'User', :foreign_key => 'user_id'
end
现在对于
消息
,您可以像下面这样直接获取
发送者
最近者

@messages = Message.includes(:sender, :receipent) # You can load only sender or only receipent

#In View
message.sender.name 
#OR
message.receipent.name

到目前为止,我已经了解到,您的
messages
表中有一个
from
列,用于存储
用户id
。因此,如果您调用
message.from
,它将返回
用户id
。然后您可以执行以下操作

class Message < AR::Base
     belongs_to :user, :foreign_key=>'from' 
end
现在,在您的视图中,您可以调用
message.user.name
直接获取用户名。在您的视图中根本不需要以下两行


如果我遗漏了什么,请告诉我


更新: 这是我试过的

用户模型

class User < ActiveRecord::Base
    attr_accessible :age, :name
    has_many :sent_messages,    :class_name=>'Message', :foreign_key => 'from'
    has_many :received_messages,:class_name=>'Message', :foreign_key => 'user_id'
end
#Contains Data:
#<User id: 1, name: "p1", age: 27, ... ...>, 
#<User id: 2, name: "p2", age: 25, ... ...
class Message < ActiveRecord::Base
    attr_accessible :body, :sender, :title, :receipent
    belongs_to :sender,     :class_name => 'User', :foreign_key => 'from'
    belongs_to :receipent,  :class_name => 'User', :foreign_key => 'user_id'
end
现在对于
消息
,您可以像下面这样直接获取
发送者
最近者

@messages = Message.includes(:sender, :receipent) # You can load only sender or only receipent

#In View
message.sender.name 
#OR
message.receipent.name

“我的消息”表有一个
用户id
和一个
发件人
字段。我需要这两个字段,因为
user\u id
包含作为邮件收件人的用户的id,而
from
字段包含发件人的用户id。我将其设置为:
user.messages.create(body:content,from:current\u user.id)
我认为外键只能与
attown\u to
方法一起使用?如果提供带有
attown\u to
的外键,它将假定同一表中的列。但是如果您提供的
有许多
,那么它将在相关表中假定。最终,两者都是同一个地方:)这是因为您可能需要在任何地方定义关系。就像在我的示例中,我使用了所有4种可能的关系。如果不需要任何人,您可以删除。My messages表既有一个
用户id
字段,也有一个
from
字段。我需要这两个字段,因为
user\u id
包含作为邮件收件人的用户的id,而
from
字段包含发件人的用户id。我将其设置为:
user.messages.create(body:content,from:current\u user.id)
我认为外键只能与
attown\u to
方法一起使用?如果提供带有
attown\u to
的外键,它将假定同一表中的列。但是如果您提供的
有许多
,那么它将在相关表中假定。最终,两者都是同一个地方:)这是因为您可能需要在任何地方定义关系。就像在我的示例中,我使用了所有4种可能的关系。如果你不需要任何人,你可以移除。