これは非常にシンプルなので、私は謝罪するのが比較的新しいですが、私はこの問題を約1週間今すぐ!私は既にアップロードされている画像にアクセスして、別の画像の透かしとして使用しようとしています。私は必要と思われるものを切り抜いたが、欠けていると思われるものがあれば教えてください。Ruby-On-Rails - ポストモデル/ポストコントローラ#の作成時にcurrent_userにアクセスできない
私はcurrent_userにアクセスし、そのIDを使用してURLへのパスを定義します。私はこのコードがある範囲で動作することを知っています:
User.find(1).watermarkimage.url(:medium)
しかし、私は1を現在のユーザーに置き換えます。
:watermark_pathの下で、私は試しました: User.find(attachment.instance.user_id).watermarkimage; attachment.instance.user_id.watermarkimage; owner.watermarkimage、current_user; current_user.id、User.find(current_user.id)と運がないかなりの数のものがあります。私は多くの時間を得ています:
Couldn't find User with 'id'=
user_idは本当に私を混乱させるものであるパラメータになります。なぜ私がこのモデルでそれにアクセスできないのか教えていただけたら、本当に感謝しています。
ポストモデル
class Post < ActiveRecord::Base
before_create :owner
belongs_to :user
validates :user_id, presence: true
validates :media, presence: true
validates :caption, length: { minimum: 3, maximum: 300 }
def owner
self.user_id = current_user.id
end
has_attached_file :media, :styles => lambda { |attachment| {
:large => {
:processors => [:watermark],
:geometry => "800>",
:watermark_path => self.current_user.watermarkimage.url(:medium),
:position => 'SouthEast'
}
}
}, :default_url => "#{Rails.root}/public/apercha logo.jpg"
validates_attachment_content_type :media, :content_type => /.*/
ポストコントローラー
class PostsController < ApplicationController
before_action :authenticate_user!
...
def create
@post = current_user.posts.build(post_params)
if @post.save
flash[:success] = "Your post has been created!"
redirect_to posts_path
else
flash[:alert] = "Your new post couldn't be created! Please check the form."
render 'new'
end
end
スキーマ
create_table "posts", force: :cascade do |t|
...
t.integer "user_id"
...
end
add_index "posts", ["user_id"], name: "index_posts_on_user_id", using: :btree
こんにちは!答えてくれてありがとう。ロジックが理解できるようになりました。私がそれを行うと、未定義のメソッドwatermarkimageがnilになる:PostsController#createのNoMethodErrorの下にあるNilClass。何か案は? –
私はうんざりです。検証段階にあるので、実際には 'self.user.watermarkimage.url(:medium)'を呼び出す必要があると思います。 – inveterateliterate