2017-02-09 61 views
1

這是我第一次使用foreign_key,而且我不知道如何爲它創建驗證。問題是這樣的:Ruby on Rails:在foreign_key模型驗證中提供幫助

我正在創建一個聊天請求和聊天框應用程序。

我有這樣的chatrequest模型。

chatrequest.rb 
has_many :conversations 
belongs_to :user 

接下來,我有一個會話模型,它批量接受聊天請求的用戶。

conversation.rb 
belongs_to :chatrequest 
belongs_to :sender, foreign_key: "sender_id", class_name: "User" 
belongs_to :recipient, foreign_key: "recipient_id", class_name: "User" 

該邏輯已經工作。我創建了一個的link_to功能,結合創建聊天會話模型,這是這樣的:

<p> 
 
<%= link_to 'Chat me', conversations_path(sender_id: current_user.id, recipient_id: @chatrequest.user.id, chatrequest_id: @chatrequest.id), method: 'POST' %> 
 
</p>

現在,我想實現的是這三個驗證:

  1. CURRENT_USER != recipient_id(不能接受自我請求)
  2. 將不會創建,除非current_user.id == sender_id
  3. 將不會創建,除非chatrequest.user.id == recipient_id 4.(可選)確保current_user(發件人)只接受sender_id(收件人)。

對不起,如果它有點難,我真的不知道該怎麼做。如果您有代碼段,請將其發佈。提前致謝!

+0

我很想知道如果我的方法工作,如果你找到另一種方式來做到這一點。 –

回答

1

你既可以創建自己的方法來驗證幾乎任何東西,也可以使用ActiveRecord。如果你把你自己的,你可以做到這一點的醜陋的方式:

validate :conversation_is_valid 

def conversation_is_valid 
    errors.add(:recipient, "can't be the sender") if recipient_id != current_user 
    errors.add(:sender, "needs to be the current user") if current_user.id == sender_id 
    errors.add(:chatrequest, "user needs to be the recipient") if chatrequest.user.id == recipient_id 
end 

這將確保您的所有需求進行檢查,如果它是不是真的就不會存在。否則它會通知你錯誤。有多種方法可以做到這一點,檢查Validations Guide