在建立文件链接时出错:
Routing Error
No route matches [GET] "/price.txt"
#view
<div class="container" id = "prices">
<div class="row center-block">
<a type="button" id="get-price" class="btn btn-success button-get-price"
href="<%= asset_path('price.txt') %>">Get price!</a>
</div>
</div>
#routes
root 'static_pages#home'
match '/', to: 'static_pages#home', via: 'post'
match '/manager', to: 'static_pages#manager', via: 'get'
match '/signin', to: 'sessions#new', via: 'get'
match '/signout', to: 'sessions#destroy', via: 'delete'
match '/manager', to: 'static_pages#manager', via: 'edit'
match '/manager', to: 'static_pages#manager', via: 'update'
但是,当我将price.txt
文件重命名为公共文件夹并将视图文件重命名为1.txt
时,一切正常。
什么错了? 感谢
答案 0 :(得分:1)
<a type="button" id="get-price" class="btn btn-success button-get-price"
href="<%= asset_path('price.txt') %>">Get price!</a>
应该......
<%= link_to "Get Price", public_path("price.txt"), id: "get-price", class: "btn btn-success button-get-price" %>
如果您想使用按钮:
<%= button_to "Get Price", public_path("price.txt"), method: :get, id: "get-price", class: "btn btn-success button-get-price" %>
asset_path
引用/public
目录Rails从“公共”目录运行。
如果您在其中存储了文件,则需要直接引用该文件(使用直接网址:yoururl.com/public.txt
或public_path
,这是相对的)。
-
虽然资产也是从public
目录加载的(当你“预编译”它们时,____资产被放入public/assets
),使用{{3}将仅查看定义为“资产”目录的内容。
因此,如果您想要调用 public 目录中的文件,您将无法使用asset_path
- 而不是public_path
。
<强>助手强>
关于链接,您需要意识到asset_path
(其中Rails' helpers和link_to
只有两个)只输出HTML。
虽然在您的视图中使用它们似乎很费力,但其好处远大于成本 - 它们提供了对所有最新HTML构造的访问。
这很重要,因为而不是写...
<a href="....">Your Link</a>
...并且发现<a>
标记已更改规范,您可以使用...
<%= link_to "Your Link" ... %>
...并在下一版Rails中提供HTML更新。
它使您的应用程序以动态值运行,而不必手动编写每个元素的代码 - 使维护成为一个巨大的痛苦。
-
静态页面
您似乎也在使用static_pages
的教程。
添加模型和放大器会更好。数据库支持这个:
#config/routes.rb
resources :static_pages, path: "", only: [:show, :index, :edit, :update], path_names: {edit: "manager", update: "manager"} do
get :manager, on: :collection
end
resources :sessions, path: "", only: [:new, :create, :destroy], path_names: {new: "signin", create: "signin", destroy: "signout"}
#app/controllers/static_pages_controller.rb
class StaticPagesController < ApplicationController
before_action :get_page, only: [:show, :edit, :update, :destroy]
def index
@pages = StaticPage.all
end
def edit
end
def update
redirect_to @page if @page.update
end
def show
end
def destroy
redirect_to pages_root_path if @page.destroy
end
private
def get_page
@page = StaticPage.find params[:id]
end
end
#app/models/static_page.rb
class StaticPage < ActiveRecord::Base
end
您必须随附数据表:
$ rails g migrations CreateStaticPages
#db/migrate/create_static_pages______.rb
class CreateStaticPages < ActiveRecord::Migration
def change
create_table :static_pages do |t|
t.string :title
t.text :body
t.timestamps
end
end
end
$ rake db:migrate