我正在尝试使用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> 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**
答案 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"
}
变量会显示在您的参数中。
然后一切都将是独角兽和彩虹。