没有路线匹配[GET]“/price.txt”

时间:2015-10-27 09:56:36

标签: ruby-on-rails ruby

在建立文件链接时出错:

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时,一切正常。

什么错了? 感谢

1 个答案:

答案 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" %>
  1. 尽可能使用 Rails helpers (这有助于保持兼容性)
  2. 您正在使用asset_path引用/public目录
  3. 中的文件

    Rails从“公共”目录运行。

    如果您在其中存储了文件,则需要直接引用该文件(使用直接网址:yoururl.com/public.txtpublic_path,这是相对的)。

    -

    虽然资产也是从public目录加载的(当你“预编译”它们时,____资产被放入public/assets),使用{{3}将查看定义为“资产”目录的内容。

    因此,如果您想要调用 public 目录中的文件,您将无法使用asset_path - 而不是public_path

    注释

    <强>助手

    关于链接,您需要意识到asset_path(其中Rails' helperslink_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