使用carrierwave上传文件

时间:2017-05-25 22:52:28

标签: ruby-on-rails mongodb carrierwave

我正在尝试使用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中运行时显示错误,我无法弄清楚如何克服, 在这里我附上错误的照片 enter image description here

请帮帮我。 这是终端上的错误:

**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**

1 个答案:

答案 0 :(得分:0)

您可以在此处看到customConfigLoaded

user_path

要链接到那个,你应该这样做:

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

而不是:

<%= link_to "Home" , user_path %>

但是,要做到这一点,您需要<%= link_to "Home" , :controller => :users, :action => :show %> 行动中的@user变量。类似的东西:

PostsController create

顺便说一下,您应该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有点毫无意义。

BUUUUUUUT ......你的参数中没有if @post.save

:user_id

Sooo,您应该在新的帖子表单中添加hidden_field,这样当您点击提交按钮时,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" } 变量会显示在您的参数中。

然后一切都将是独角兽和彩虹。