매우 간단하다면 사과하는 편이 낫지 만 약 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