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控制台还是浏览器?