Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2008/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 多表Rails查询_Ruby On Rails_Ruby_Ruby On Rails 4_Devise - Fatal编程技术网

Ruby on rails 多表Rails查询

Ruby on rails 多表Rails查询,ruby-on-rails,ruby,ruby-on-rails-4,devise,Ruby On Rails,Ruby,Ruby On Rails 4,Devise,我是rails的新手,在我的应用程序中有一些贯穿始终的关系。 我有用户、消息和消息收件人模型一个用户有许多消息,一个消息有一个发件人,一个消息有许多收件人-消息收件人是联接表 我试图在我的邮件视图中显示邮件发件人的姓名,该视图保存在用户模型中。然而,无论我以何种方式尝试这样做,我都会犯错误——我不确定我是否坚持了Rails的方式 用户字段包括:id、姓名、姓氏、电子邮件 消息字段为:id、发件人id、主题、正文发件人id是用户FK 邮件收件人字段为:id、用户id、邮件id用户/邮件id为FKs

我是rails的新手,在我的应用程序中有一些贯穿始终的关系。 我有用户、消息和消息收件人模型一个用户有许多消息,一个消息有一个发件人,一个消息有许多收件人-消息收件人是联接表

我试图在我的邮件视图中显示邮件发件人的姓名,该视图保存在用户模型中。然而,无论我以何种方式尝试这样做,我都会犯错误——我不确定我是否坚持了Rails的方式

用户字段包括:id、姓名、姓氏、电子邮件

消息字段为:id、发件人id、主题、正文发件人id是用户FK

邮件收件人字段为:id、用户id、邮件id用户/邮件id为FKs

以下是我的模型,我也在使用Desive:

class Message < ActiveRecord::Base
  belongs_to :user, :class_name => User, :foreign_key => "sender_id"#sender
  has_many :message_recipients
  has_many :users, through: :message_recipients
end



class User < ActiveRecord::Base
  # Include default devise modules. Others available are:
  # :confirmable, :lockable, :timeoutable and :omniauthable
  devise :database_authenticatable, :registerable,
         :recoverable, :rememberable, :trackable, :validatable

  has_many :message_recipients
  has_many :messages, through: :message_recipients
end



class MessageRecipient < ActiveRecord::Base
  belongs_to :message, :class_name => Message, :foreign_key => "message_id"
  belongs_to :user, :class_name => User, :foreign_key => "user_id"
end
这是我的邮件/index.html.erb:

<% @messages.each do |message| %>
  <div class="message">
    <h2><%= message.subject %></h2>
    <p>Sent by <%= message.user.forename %></p>
  </div>
<% end %>
在我看来,我遇到了麻烦,因为我似乎无法根据发送消息的人的发件人id获得用户的名字值,因为我得到了一个命名错误


任何帮助/最佳实践建议都将不胜感激

在不过度思考的情况下,关联可能非常棘手。您只需要两个模型,用户和消息。 Messages表将包含标题、文本、收件人id和发件人id。听起来发件人将从数据库中的收件人下拉列表中进行选择。选择后,将标记此人的用户id,并将当前用户的用户id设置为发件人的id。另一个字段:示例 Message.createid将自动发送当前用户id收件人用户id,文本:祝您愉快 在用户模型中:具有并属于消息;在消息模型中:属于用户。
在您的控制台中尝试一下。

关联可能非常棘手,而且不会过度思考。您只需要两个模型,用户和消息。 Messages表将包含标题、文本、收件人id和发件人id。听起来发件人将从数据库中的收件人下拉列表中进行选择。选择后,将标记此人的用户id,并将当前用户的用户id设置为发件人的id。另一个字段:示例 Message.createid将自动发送当前用户id收件人用户id,文本:祝您愉快 在用户模型中:具有并属于消息;在消息模型中:属于用户。
在您的控制台中试用。

对于发送给多个用户的消息,这是否有效?谢谢你的回答,顺便说一句!是的,查看如何保存到使用postgresql的用户ID数组,对吗?我使用的是sqlite3,你认为会是一样的吗?非常感谢,我不知道,但是升级到postgresql并不困难。这些是你发的即时通讯吗?如果是的,并且您使用的是Rails 5,您可能想查看ActiveCable上的一些教程,我对此一无所知;从未看过关于它的教程。这可能是所有这些问题的答案。但对于发送给多个用户的消息,这是否有效?谢谢你的回答,顺便说一句!是的,查看如何保存到使用postgresql的用户ID数组,对吗?我使用的是sqlite3,你认为会是一样的吗?非常感谢,我不知道,但是升级到postgresql并不困难。这些是你发的即时通讯吗?如果是的,并且您使用的是Rails 5,您可能想查看ActiveCable上的一些教程,我对此一无所知;从未看过关于它的教程。这可能是所有这些问题的答案。