Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/58.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/0/asp.net-mvc/16.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_Postgresql - Fatal编程技术网

Ruby on rails 在rails中的选择和分组中转换查询

Ruby on rails 在rails中的选择和分组中转换查询,ruby-on-rails,postgresql,Ruby On Rails,Postgresql,我正在学习join表查询生成。我可以实现我的目标,而无需使用关联join表。但现在我的问题是,如何才能获得与使用join、select和group相同的结果 型号: class User < ActiveRecord::Base has_many :messsages end class Messsage < ActiveRecord::Base belongs_to :user end #users : id , first_name , last_n

我正在学习
join
表查询生成。我可以实现我的目标,而无需使用关联
join
表。但现在我的问题是,如何才能获得与使用
join
select
group
相同的结果

型号:

class User < ActiveRecord::Base
  has_many :messsages         
end

class Messsage < ActiveRecord::Base
  belongs_to :user
end
#users : id , first_name , last_name
#messages: id, subject , description , sender_id, recipient_id
 @messsages = Messsage.where(recipient_id: current_user.id)
 @sender_list = @messsages.group(:sender_id).count
 => Expected correct output: {1=>1, 2=>1, 3=>2, 4=>3} #getting as result 
@sender_list = Messsage.joins(:user).select("users.id, users.first_name").group("users.id , messsages.sender_id")
PG::UndefinedColumn: ERROR:  column messsages.user_id does not exist
LINE 1: ... "messsages" INNER JOIN "users" ON "users"."id" = "messsages...
                                                             ^
: SELECT users.id, users.first_name FROM "messsages" INNER JOIN "users" ON "users"."id" = "messsages"."user_id" GROUP BY users.id , messsages.sender_id
控制器:

class User < ActiveRecord::Base
  has_many :messsages         
end

class Messsage < ActiveRecord::Base
  belongs_to :user
end
#users : id , first_name , last_name
#messages: id, subject , description , sender_id, recipient_id
 @messsages = Messsage.where(recipient_id: current_user.id)
 @sender_list = @messsages.group(:sender_id).count
 => Expected correct output: {1=>1, 2=>1, 3=>2, 4=>3} #getting as result 
@sender_list = Messsage.joins(:user).select("users.id, users.first_name").group("users.id , messsages.sender_id")
PG::UndefinedColumn: ERROR:  column messsages.user_id does not exist
LINE 1: ... "messsages" INNER JOIN "users" ON "users"."id" = "messsages...
                                                             ^
: SELECT users.id, users.first_name FROM "messsages" INNER JOIN "users" ON "users"."id" = "messsages"."user_id" GROUP BY users.id , messsages.sender_id
通过这一点,我可以从哪个发件人获得多少信息。我正在使用
PostgreSQL

我的尝试:

class User < ActiveRecord::Base
  has_many :messsages         
end

class Messsage < ActiveRecord::Base
  belongs_to :user
end
#users : id , first_name , last_name
#messages: id, subject , description , sender_id, recipient_id
 @messsages = Messsage.where(recipient_id: current_user.id)
 @sender_list = @messsages.group(:sender_id).count
 => Expected correct output: {1=>1, 2=>1, 3=>2, 4=>3} #getting as result 
@sender_list = Messsage.joins(:user).select("users.id, users.first_name").group("users.id , messsages.sender_id")
PG::UndefinedColumn: ERROR:  column messsages.user_id does not exist
LINE 1: ... "messsages" INNER JOIN "users" ON "users"."id" = "messsages...
                                                             ^
: SELECT users.id, users.first_name FROM "messsages" INNER JOIN "users" ON "users"."id" = "messsages"."user_id" GROUP BY users.id , messsages.sender_id
错误:

class User < ActiveRecord::Base
  has_many :messsages         
end

class Messsage < ActiveRecord::Base
  belongs_to :user
end
#users : id , first_name , last_name
#messages: id, subject , description , sender_id, recipient_id
 @messsages = Messsage.where(recipient_id: current_user.id)
 @sender_list = @messsages.group(:sender_id).count
 => Expected correct output: {1=>1, 2=>1, 3=>2, 4=>3} #getting as result 
@sender_list = Messsage.joins(:user).select("users.id, users.first_name").group("users.id , messsages.sender_id")
PG::UndefinedColumn: ERROR:  column messsages.user_id does not exist
LINE 1: ... "messsages" INNER JOIN "users" ON "users"."id" = "messsages...
                                                             ^
: SELECT users.id, users.first_name FROM "messsages" INNER JOIN "users" ON "users"."id" = "messsages"."user_id" GROUP BY users.id , messsages.sender_id
更新: 我还更新了我的表单代码,以便您更好地了解:

<%= form_for(@messsage) do |f| %>
  <div class="field">
    <%= f.label :sender_id %><br>
    <%= f.collection_select :sender_id, User.all, :id, :id  %>
  </div>
  <div class="field">
    <%= f.label :subject %><br>
    <%= f.text_field :subject %>
  </div>
  <div class="field">
    <%= f.label :description %><br>
    <%= f.text_area :description %>
  </div>
  <div class="field">
    <%=  f.hidden_field :recipient_id , :value => current_user.id %>
  </div>
  <div class="actions">
    <%= f.submit %>
  </div>
<% end %>




当前用户id%>
页面截图: 当你写作时

class Messsage < ActiveRecord::Base
  belongs_to :user
end
因此,现在一条
消息
有一个
发送者
接收者

我们还可以更新
用户
模型,以了解发送消息和接收消息之间的差异

class User < ActiveRecord::Base
  has_many :sent_messages, class_name: 'Message', foreign_key: :sender_id
  has_many :received_messages, class_name: 'Message', foreign_key: :recipient_id
end

抱歉,在您编辑您的问题后,我删除了我的评论,现在有意义了,我认为问题在于关联,用户何时是收件人,何时是发件人?或者一封邮件是否属于两个人,一个是发件人,一个是收件人?当用户创建邮件时,我将收件人的id作为当前的用户id,用户可以向任何用户发送消息,此时在sender_id列中会插入用户的id。(在这里,他/她也可以自己发送消息,这不应该是,但现在不是一个问题)我是否应该更新我的表单代码?请稍候,我将添加一个解释为什么您可能有问题的答案OK我已经更改了模型的代码。我的问题是,我想将所有发件人\u id与countexactly…分组。。。。我希望每个收件人都能收到。在模型中更改后,我对fire查询更加困惑。。。所以当用户登录时,他可以知道哪个用户向他发送了多少MSG。。。知道了?或者仍然需要更多描述:(如果我无法解释,例如来自x的5条消息,来自y的2条消息,来自zI的3条消息尝试并获得:MessagesController中的NameError#index uninitialized constant User::message是rails控制台还是浏览器?