2016-05-21 3 views
0

Я новичок в Rails. У меня есть контроллер сообщений, комментариев и вложений. Я создал свой собственный контроллер вложений, так как я использую API FilePicker. Я пытаюсь создать его так, чтобы пользователь мог прикрепить файл к сообщению, а также приложить файл к комментарию, если они того пожелают.Rails-Прикрепить файл с использованием нескольких контроллеров

Сообщений Контроллер

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. Теперь мне нужно сделать то же самое для вложений или есть другой метод? Я хочу, чтобы отношения между сообщениями/комментариями и вложениями позволяли пользователю прикреплять файлы, но у меня также будет отдельный раздел в моем приложении, чтобы загружать и скачивать файлы без необходимости «сообщения», поэтому у меня есть отдельный контроллер для вложений. Любые советы о том, как создать эту функциональность, чтобы пользователь мог прикрепить файл к своему сообщению, были бы очень благодарны.

ответ

0

Я бы порекомендовал разделить вложения, как вы видите их на два отдельных объекта. Я бы сказал post_attachments owned_to posts/comments, а затем я бы сделал второй объект модели, называемый как direct_upload, который вообще не ассоциируется с сообщениями/комментариями и не обрабатывает прямую ситуацию с загрузкой/загрузкой, о которой вы говорили. Это упростит вам работу, поскольку вы уже загружаете свои собственные вложения файлов, и если кто-либо будет сотрудничать с вами, будет ясно сказано, что ожидается от каждого класса модели.

+0

Я думал о том, чтобы сделать то же самое, чтобы сохранить его в чистоте, как вы предполагали. Любые советы о том, как я буду интегрировать текущую модель приложений, которую я имею, с моделью сообщений? – user3318660

Смежные вопросы