我对编码比较陌生,如果这非常简单,那么道歉,但我现在已经坚持这个问题大约一个星期了!我尝试访问已上传的图片,以用作其他图片的水印。我已经删除了我认为必要的内容,但如果您认为有任何遗漏,请告诉我。
我想访问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
答案 0 :(得分:0)
如果这是为了替换has_attached_file
验证中的代码,您应该可以说user.watermarkimage.url(:image)
之类的内容。
如果post belongs_to :user
您应该能够在仅user
的帖子实例上呼叫该用户。模型不应该知道当前用户是谁(Access Devise's current_user in Model)。
此外,由于您在控制器中通过current_user.posts.build
创建帖子,因此会为您设置帖子上的用户。您不需要before_create
回拨来设置用户。