我是Rails的新手。我有一个帖子,评论和附件控制器。我使用FilePicker API创建了自己的附件控制器。我正在尝试构建它,以便用户可以将文件附加到帖子,也可以根据需要将文件附加到评论中。
帖子控制器
def create
@post = current_user.posts.build(post_params)
if @post.save
flash[:success] = "Your post has been created!"
redirect_to root_path
else
flash[:alert] = "Your new post couldn't be created! Please check the form."
render :new
end
end
...
private
def post_params
params.require(:post).permit(:caption, :user_id)
end
附件控制器
def create
title = params[:attachment][:title]
if Attachment.exists?(:title => title)
redirect_to attachments_path
else
@attachment = current_user.attachments.build(attachment_params)
@attachment.user_id = current_user.id
name = params[:attachment][:name]
@attachment.save
redirect_to attachments_path
end
end
...
private
def attachment_params
params.require(:attachment).permit(:title, :user_id, :name)
end
提交帖子的帖子视图
<%= simple_form_for(@post) do |f| %>
<div class="profile_container">
<div class="updateArea">
<%= f.text_area :caption, class: "textarea", placeholder: "Post here", label: false %>
<%= f.button :submit, "Post", disabled: true, class: "post_button", id: "post_button_padding" %>
<%# <%= f.association :user %>
</div>
</div>
上传文件的附件视图
<%= filepicker_js_include_tag %>
<%= simple_form_for @attachment, :html=> { id: 'file_stack_form' } do |f| %>
<%= f.filepicker_field :title, multiple: 'false', onchange: 'onUpload(event)', services: "CONVERT, BOX, COMPUTER, DROPBOX, EVERNOTE, FACEBOOK, GMAIL, IMAGE_SEARCH, FLICKR, GITHUB, GOOGLE_DRIVE, SKYDRIVE, URL, WEBCAM, INSTAGRAM, VIDEO, AUDIO, CLOUDDRIVE, IMGUR" %>
<%= f.submit %>
<% end %>
的routes.rb
resources :posts do
resources :comments
end
resources :attachments
所以我对帖子附加了评论,并通过嵌套路由创建了该关联,并通过has_many和belongs_to创建了模型之间的关联。现在我需要为附件做同样的事情还是有另一种方法?我想要帖子/评论和附件之间的关系,以便用户可以附加文件,但我的应用程序中还有一个单独的部分,纯粹上传/下载文件,而不需要&#34; post&#34;,这就是为什么我有一个单独的附件控制器。有关如何构建此功能以便用户可以将文件附加到其帖子的任何建议将非常感激。
答案 0 :(得分:0)
我建议拆分附件,因为您将它们分成两个独立的实体。我会说post_attachments belongs_to posts / comments然后我会创建一个名为direct_upload的第二个模型实体,它根本没有与帖子/评论相关联,并处理你提到的直接上传/下载情况。这将使您更容易维护,因为您已经在滚动自己的文件附件,如果有人与您合作,将清楚地了解每个模型类的预期。