about summary refs log tree commit diff
diff options
context:
space:
mode:
authoralpaca-tc <alpaca-tc@alpaca.tc>2017-04-17 22:54:33 +0900
committerEugen <eugen@zeonfederated.com>2017-04-17 15:54:33 +0200
commit630de52fdd93e7465d0fb9dac5f35db30a2545d2 (patch)
tree416935f23d0e73bd3f4fb032d7da88407bc3fa04
parentf8546ad5a21c840107d263acea0c051081af9c7b (diff)
Required foreign keys (#2003)
* Add `required: true` option to foreign column

* Fixes NoMethodError

```
> Favourite.new.valid?
NoMethodError: undefined method `reblog?' for nil:NilClass
```
-rw-r--r--app/models/favourite.rb6
-rw-r--r--app/models/mute.rb5
-rw-r--r--app/models/status.rb3
-rw-r--r--app/models/subscription.rb2
-rw-r--r--app/models/user.rb3
5 files changed, 8 insertions, 11 deletions
diff --git a/app/models/favourite.rb b/app/models/favourite.rb
index 41d06e734..32d54476b 100644
--- a/app/models/favourite.rb
+++ b/app/models/favourite.rb
@@ -3,14 +3,14 @@
 class Favourite < ApplicationRecord
   include Paginable
 
-  belongs_to :account, inverse_of: :favourites
-  belongs_to :status,  inverse_of: :favourites, counter_cache: true
+  belongs_to :account, inverse_of: :favourites, required: true
+  belongs_to :status,  inverse_of: :favourites, counter_cache: true, required: true
 
   has_one :notification, as: :activity, dependent: :destroy
 
   validates :status_id, uniqueness: { scope: :account_id }
 
   before_validation do
-    self.status = status.reblog if status.reblog?
+    self.status = status.reblog if status&.reblog?
   end
 end
diff --git a/app/models/mute.rb b/app/models/mute.rb
index a5b334c85..7987ed007 100644
--- a/app/models/mute.rb
+++ b/app/models/mute.rb
@@ -3,9 +3,8 @@
 class Mute < ApplicationRecord
   include Paginable
 
-  belongs_to :account
-  belongs_to :target_account, class_name: 'Account'
+  belongs_to :account, required: true
+  belongs_to :target_account, class_name: 'Account', required: true
 
-  validates :account, :target_account, presence: true
   validates :account_id, uniqueness: { scope: :target_account_id }
 end
diff --git a/app/models/status.rb b/app/models/status.rb
index c0a5d9d1b..e54664275 100644
--- a/app/models/status.rb
+++ b/app/models/status.rb
@@ -10,7 +10,7 @@ class Status < ApplicationRecord
 
   belongs_to :application, class_name: 'Doorkeeper::Application'
 
-  belongs_to :account, inverse_of: :statuses, counter_cache: true
+  belongs_to :account, inverse_of: :statuses, counter_cache: true, required: true
   belongs_to :in_reply_to_account, foreign_key: 'in_reply_to_account_id', class_name: 'Account'
 
   belongs_to :thread, foreign_key: 'in_reply_to_id', class_name: 'Status', inverse_of: :replies
@@ -26,7 +26,6 @@ class Status < ApplicationRecord
   has_one :notification, as: :activity, dependent: :destroy
   has_one :preview_card, dependent: :destroy
 
-  validates :account, presence: true
   validates :uri, uniqueness: true, unless: 'local?'
   validates :text, presence: true, unless: 'reblog?'
   validates_with StatusLengthValidator
diff --git a/app/models/subscription.rb b/app/models/subscription.rb
index 497cabb09..63553e9fe 100644
--- a/app/models/subscription.rb
+++ b/app/models/subscription.rb
@@ -4,7 +4,7 @@ class Subscription < ApplicationRecord
   MIN_EXPIRATION = 3600 * 24 * 7
   MAX_EXPIRATION = 3600 * 24 * 30
 
-  belongs_to :account
+  belongs_to :account, required: true
 
   validates :callback_url, presence: true
   validates :callback_url, uniqueness: { scope: :account_id }
diff --git a/app/models/user.rb b/app/models/user.rb
index 27a38674e..a59d843d4 100644
--- a/app/models/user.rb
+++ b/app/models/user.rb
@@ -9,10 +9,9 @@ class User < ApplicationRecord
          otp_secret_encryption_key: ENV['OTP_SECRET'],
          otp_number_of_backup_codes: 10
 
-  belongs_to :account, inverse_of: :user
+  belongs_to :account, inverse_of: :user, required: true
   accepts_nested_attributes_for :account
 
-  validates :account, presence: true
   validates :locale, inclusion: I18n.available_locales.map(&:to_s), unless: 'locale.nil?'
   validates :email, email: true