![](/img/trans.png)
[英]How can I convert Facebooks Graph API JSON data to find a user that already exists in my database?
[英]How to find if reversed user input exists in database
我正在創建一個信使系統,我在創建一個房間之前使用 find_or_create_by 在數據庫中查找房間,這工作正常,但我有兩個 ID,sender_id 和 receiver_id,我想弄清楚如何檢查是否有數據庫中的房間實例,在創建新房間之前反轉了 ID。
就像在數據庫房間 1 中 Sender_id = 1 和 Receiver_id = 2 一樣。如果我嘗試創建一個實例,其中 sender_id =2 和 receiver_id = 1,我希望它加載房間 1 而不是創建新實例。
房間控制器:
def create
@room = Room.find_or_create_by permitted_parameters
if @room.save!
redirect_to room_path(@room)
else
redirect_to rooms_path
end
end
private
def permitted_parameters
params.require(:room).permit(:name, :sender_id, :receiver_id)
end
創建的形式很簡單
<%= bootstrap_form_for @room do |f| %>
<%= f.collection_select :receiver_id, User.all, :id, :first_name %>
<%= f.hidden_field :sender_id, :value => current_user.id %>
<%= f.submit "Save", class: 'btn btn-success' %>
<% end %>
房間.rb
class Room < ApplicationRecord
belongs_to :user, optional: true
has_many :messages, dependent: :destroy,
inverse_of: :room
has_many :users, {:through=>:messages, :source=>"user"}
end
消息文件
class Message < ApplicationRecord
belongs_to :user, :class_name => 'User', :foreign_key => "user_id"
belongs_to :room, inverse_of: :messages
end
用戶名
has_many :messages, :class_name => "Message", :foreign_key => "user_id"
has_many :rooms, :foreign_key => "sender_id"
類似這樣的信息應該會告訴您房間是否是從任一方向預訂的:
Room.where('(sender_id = :sender_id AND receiver_id = :receiver_id) OR
(sender_id = :receiver_id AND receiver_id = :sender_id)',
sender_id: permitted_parameters[:sender_id],
receiver_id: permitted_parameters[:receiver_id]).first
如果那回來.present?
你應該知道房間已經訂好了。
更新以根據 OP 的評論刪除 where 子句中的room
。
這可能對你有幫助!
Room.where(sender_id: params[:sender_id],receiver_id: params[:receiver_id]).or(Room.where(receiver_id: params[:sender_id],sender_id: params[:receiver_id])).first_or_create
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.