CarrierWave がモデルのアソシエーションと相互作用する方法、または私の場合、CarrierWave が相互作用しない方法について簡単な質問があります。所有者からのデータを使用して、CarrierWaveとbelongs_to
を設定したいと考えています。しかし、のようなものを呼び出すと、nil クラスに がないことを示す NoMethodError が返されることがわかりました。cache_dir
store_dir
model.other_model.attribute
attribute
それは私ができる限り言語言語に翻訳されています。実際のコードは次のとおりです。
# app/models/correction.rb
class Correction < ActiveRecord::Base
belongs_to :submission, inverse_of: :corrections
belongs_to :contract, inverse_of: :corrections
mount_uploader :pdf, CorrectionsUploader
end
# app/models/contract.rb
class Contract < ActiveRecord::Base
belongs_to :author, inverse_of: :contracts
belongs_to :submission, inverse_of: :contract
has_many :corrections, inverse_of: :contract
mount_uploader :pdf, ContractUploader
end
# app/uploaders/corrections_uploader.rb
class CorrectionsUploader < FogCorrectionsUploader
include ::CarrierWave::Backgrounder::Delay
include CarrierWave::RMagick
include CarrierWave::MimeTypes
storage :fog
def store_dir
"corrections/#{model.contract.legal_name}/#{model.contract.titles}"
end
def cache_dir
"/www/website.com/_www/shared/submissions/corrections/#{model.contract.legal_name}/#{model.contract.titles}"
end
def extension_white_list
%w(pdf)
end
# ...some processing directives that don't seem relevant...
end
コントローラーはフォームからsubmission_id
andを取得し、それらと otherを呼び出します。これにより、予想どおり CarrierWave がトリガーされ、 が nilness であるためエラーがスローされます。contract_id
Correction.new
correction_params
model.contract
ORM は私にとっていまだに暗い大陸なので、Rails コンソールを起動してこれを実行してみましたが、問題はありませんでした。
2.0.0 :002 > test_correction = Correction.new({contract_id: 18, submission_id: 161})
=> #<Correction id: nil, submission_id: 161, contract_id: 18, pdf: nil, created_at: nil, updated_at: nil, comment: nil, delivered: nil>
2.0.0 :003 > test_correction.submission
D, [2013-10-12T21:14:31.352684 #1758] DEBUG -- : Submission Load (15.3ms) SELECT "submissions".* FROM "submissions" WHERE "submissions"."id" = $1 ORDER BY "submissions"."id" ASC LIMIT 1 [["id", 161]]
=> #<Submission id: 161, title: ...>
だから、CarrierWave について何かが欠けているように思えます---間違いなくばかげたことです--- CarrierWave についてですが、もちろんよくわかりません。これが恥ずかしいほど明白になることは間違いありませんが、誰かが持っている提案には本当に感謝しています. 前もって感謝します!