簡體   English   中英

使用carrierwave上傳文件

[英]Uploading a file using carrierwave

我正在嘗試使用載波上傳文本文件,這些是我的代碼文件,

****class PostsController < ApplicationController
    def index
      @posts = Post.all
   end
   def create
      @post = Post.create(post_params)

      if @post.save
        redirect_to :action => 'index'
         flash[:notice] = "The post has been uploaded."
      else
         render "index"
      end

   end
   private
      def post_params
      params.require(:post).permit(:attachment)
   end
end**

class Post
  include Mongoid::Document
  # attr_accessible :attachment
  mount_uploader :attachment, AttachmentUploader
  belongs_to :user
end

Routes.rb

resources :posts
    get "users/:id/post" => "posts#index"

index.html

<!DOCTYPE html>
<html>
<head>
    <title></title>
    <meta charset="utf-8">
        <meta name="viewport" content="width=device-width, initial-scale=1">
        <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css">
        <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
        <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>
        <style>
                *{
                    margin:0;
                    padding:0;
                }
                ul li a{
                  font-size: 1.2em;
                }
                .navbar-brand{
                  font-size:1.5em;
                }
                .bg{
                    background:url("https://media.licdn.com/mpr/mpr/p/5/005/089/049/38159af.jpg") no-repeat center center fixed;
                    background-size: cover;
                    height:736px;
                }
                .navbar{
                    margin-bottom: 0px;
                }
            </style>
    </head>
    <body>
        <nav class="navbar navbar-default">
            <div class="container-fluid">
              <div class="navbar-header">
                <a class="navbar-brand" href="#" style="margin-left:100px;">My Project</a>
              </div>
              <ul class="nav navbar-nav">
                <li class="active" style="margin-left:100px;"><%= link_to "Home" , :controller => :users, :action => :show %></li>
                <li style="margin-left:100px;"><%= link_to "Post" , :controller => :posts, :action => :index%></li>
              </ul>
              <ul class="nav navbar-nav navbar-right">
                <li>
                 <%= link_to logout_path do %>
                    <i class="glyphicon glyphicon-log-out"></i>&nbsp;Logout
                <% end %>
              </ul>
            </div>
        </nav>
        <% if !flash[:notice].blank? %>
            <div class = "alert alert-info">
                <button class="close" data-dismiss="alert">×</button>
                <%= flash[:notice] %>
            </div>
        <% end %>
        <div style="margin-bottom:0px;margin-left:430px;margin-top:50px;width:30%;">
            <%= form_for Post.new, :url => {:action => 'create'}, :html => {:multipart => true} do |f| %>
                <%= f.file_field :attachment , class: "filestyle"%>
                <%= f.submit "Upload" , class: "btn btn-primary btn-block" ,style:"margin-top:8px;" %>
            <% end %>
        </div>
    </body>
</html>**

它在localhost中運行時顯示錯誤,我無法找出解決方法,在這里我附有錯誤照片, 在此處輸入圖像描述

請幫幫我。 這是終端上的錯誤:

**Processing by PostsController#create as HTML
  Parameters: {"utf8"=>"✓", "authenticity_token"=>"e4yVj+UdBtlfT5OaTb25qRSFy9BpMdoE8Mdgcf1t1IzEw3RPW8+3bxmHJo4RWQH9dFeebzU03iGXKMKvT4aapA==", "post"=>{"attachment"=>#<ActionDispatch::Http::UploadedFile:0x007f34c4b7bb78 @tempfile=#<Tempfile:/tmp/RackMultipart20170526-15891-18rkkrt.txt>, @original_filename="test.txt", @content_type="text/plain", @headers="Content-Disposition: form-data; name=\"post[attachment]\"; filename=\"test.txt\"\r\nContent-Type: text/plain\r\n">}, "commit"=>"Upload"}
  Rendering posts/index.html.erb within layouts/application
  Rendered posts/index.html.erb within layouts/application (3.2ms)
Completed 500 Internal Server Error in 19ms

ActionView::Template::Error (No route matches {:action=>"show", :controller=>"users"}):
    35:             <a class="navbar-brand" href="#" style="margin-left:100px;">My Project</a>
    36:           </div>
    37:           <ul class="nav navbar-nav">
    38:             <li class="active" style="margin-left:100px;"><%= link_to "Home" , :controller => :users, :action => :show %></li>
    39:             <li style="margin-left:100px;"><%= link_to "Post" , :controller => :posts, :action => :index%></li>
    40:           </ul>
    41:           <ul class="nav navbar-nav navbar-right">

app/views/posts/index.html.erb:38:in `_app_views_posts_index_html_erb__1831786755324942533_69932134090300'
app/controllers/posts_controller.rb:13:in `create'
  Rendering /home/tej/.rbenv/versions/2.4.0/lib/ruby/gems/2.4.0/gems/actionpack-5.0.2/lib/action_dispatch/middleware/templates/rescues/template_error.html.erb within rescues/layout
  Rendering /home/tej/.rbenv/versions/2.4.0/lib/ruby/gems/2.4.0/gems/actionpack-5.0.2/lib/action_dispatch/middleware/templates/rescues/_source.html.erb
  Rendered /home/tej/.rbenv/versions/2.4.0/lib/ruby/gems/2.4.0/gems/actionpack-5.0.2/lib/action_dispatch/middleware/templates/rescues/_source.html.erb (5.5ms)
  Rendering /home/tej/.rbenv/versions/2.4.0/lib/ruby/gems/2.4.0/gems/actionpack-5.0.2/lib/action_dispatch/middleware/templates/rescues/_trace.html.erb
  Rendered /home/tej/.rbenv/versions/2.4.0/lib/ruby/gems/2.4.0/gems/actionpack-5.0.2/lib/action_dispatch/middleware/templates/rescues/_trace.html.erb (2.6ms)
  Rendering /home/tej/.rbenv/versions/2.4.0/lib/ruby/gems/2.4.0/gems/actionpack-5.0.2/lib/action_dispatch/middleware/templates/rescues/_request_and_response.html.erb
  Rendered /home/tej/.rbenv/versions/2.4.0/lib/ruby/gems/2.4.0/gems/actionpack-5.0.2/lib/action_dispatch/middleware/templates/rescues/_request_and_response.html.erb (1.2ms)
  Rendered /home/tej/.rbenv/versions/2.4.0/lib/ruby/gems/2.4.0/gems/actionpack-5.0.2/lib/action_dispatch/middleware/templates/rescues/template_error.html.erb within rescues/layout (24.9ms)**

耙路結果:

 **Prefix Verb   URI Pattern                  Controller#Action
        root GET    /                            users#index
             GET    /                            users#index
        new1 GET    /new1(.:format)              users#new1
        new2 GET    /new2(.:format)              users#new2
        new3 GET    /new3(.:format)              users#new3
       users GET    /users(.:format)             users#index
             POST   /users(.:format)             users#create
    new_user GET    /users/new(.:format)         users#new
   edit_user GET    /users/:id/edit(.:format)    users#edit
        user GET    /users/:id(.:format)         users#show
             PATCH  /users/:id(.:format)         users#update
             PUT    /users/:id(.:format)         users#update
             DELETE /users/:id(.:format)         users#destroy
             POST   /users(.:format)             users#create
             GET    /users/:id(.:format)         users#show
       login GET    /login(.:format)             sessions#new
             POST   /login(.:format)             sessions#create
      logout GET    /logout(.:format)            sessions#destroy
             DELETE /logout(.:format)            sessions#destroy
    sessions GET    /sessions(.:format)          sessions#index
             POST   /sessions(.:format)          sessions#create
 new_session GET    /sessions/new(.:format)      sessions#new
edit_session GET    /sessions/:id/edit(.:format) sessions#edit
     session GET    /sessions/:id(.:format)      sessions#show
             PATCH  /sessions/:id(.:format)      sessions#update
             PUT    /sessions/:id(.:format)      sessions#update
             DELETE /sessions/:id(.:format)      sessions#destroy
       posts GET    /posts(.:format)             posts#index
             POST   /posts(.:format)             posts#create
    new_post GET    /posts/new(.:format)         posts#new
   edit_post GET    /posts/:id/edit(.:format)    posts#edit
        post GET    /posts/:id(.:format)         posts#show
             PATCH  /posts/:id(.:format)         posts#update
             PUT    /posts/:id(.:format)         posts#update
             DELETE /posts/:id(.:format)         posts#destroy
             GET    /users/:id/post(.:format)    posts#index

Routes.rb

Rails.application.routes.draw do
    root "users#index"
    get '/' => "users#index"
    get "/new1" => "users#new1"
    get "/new2" => "users#new2"
    get "/new3" => "users#new3"
    resources :users
    post "/users" => "users#create"
    get "users/:id" => "users#show"
    get    '/login',   to: 'sessions#new'
    post   '/login',   to: 'sessions#create'
    get '/logout',  to: 'sessions#destroy'
    delete '/logout',  to: 'sessions#destroy'
    resources :sessions
    resources :posts
    get "users/:id/post" => "posts#index"

  # For details on the DSL available within this file, see http://guides.rubyonrails.org/routing.html
end**

您有一個user_path ,可以在這里看到:

user GET    /users/:id(.:format)         users#show

要鏈接到該鏈接,您應該執行以下操作:

<%= link_to "Home" , user_path %>

代替 :

<%= link_to "Home" , :controller => :users, :action => :show %>

但是,為此,您需要在PostsController create動作中使用一個@user變量。 就像是:

class PostsController < ApplicationController

  def create
    @post = Post.new(post_params)
    @user = User.find_by(id: params[:user_id])

    if @post.save
      redirect_to :action => 'index'
      flash[:notice] = "The post has been uploaded."
    else
      render "index"
    end
  end

  private
    def post_params
    params.require(:post).permit(:attachment)
  end

end

順便說一句,您應該Post.new ,而不是Post.create 否則, if @post.save毫無意義。

BUUUUUUUT ...您的參數中沒有:user_id

Parameters: {
  "utf8"=>"✓", 
  "authenticity_token"=>"e4yVj+UdBtlfT5OaTb25qRSFy9BpMdoE8Mdgcf1t1IzEw3RPW8+3bxmHJo4RWQH9dFeebzU03iGXKMKvT4aapA==", 
  "post"=>{
    "attachment"=>#<ActionDispatch::Http::UploadedFile:0x007f34c4b7bb78 @tempfile=#<Tempfile:/tmp/RackMultipart20170526-15891-18rkkrt.txt>, @original_filename="test.txt", @content_type="text/plain", @headers="Content-Disposition: form-data; name=\"post[attachment]\"; filename=\"test.txt\"\r\nContent-Type: text/plain\r\n">
  },
  "commit"=>"Upload"
}

如此,您應該在新的帖子表單中添加一個hidden_field ,這樣,當您單擊“提交”按鈕時, :user_id變量就會顯示在您的參數中。

然后一切都會變成獨角獸和彩虹。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM