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种可能的关系。如果你不需要任何人,你可以移除。