Rails-使用多个控制器附加文件

时间:2016-05-21 19:45:02

标签: ruby-on-rails

我是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;,这就是为什么我有一个单独的附件控制器。有关如何构建此功能以便用户可以将文件附加到其帖子的任何建议将非常感激。

1 个答案:

答案 0 :(得分:0)

我建议拆分附件,因为您将它们分成两个独立的实体。我会说post_attachments belongs_to posts / comments然后我会创建一个名为direct_upload的第二个模型实体,它根本没有与帖子/评论相关联,并处理你提到的直接上传/下载情况。这将使您更容易维护,因为您已经在滚动自己的文件附件,如果有人与您合作,将清楚地了解每个模型类的预期。