标签: rails-routing

在[GET]"/ articles/new"中路由错误

我正在阅读"Rails入门",我坚持第5.1章.我试过了:

rails g controller articles
Run Code Online (Sandbox Code Playgroud)

我试图打开articles/new,我收到以下错误消息:

No route matches [GET] "/articles/new"
Rails.root: C:/Sites/blog
Run Code Online (Sandbox Code Playgroud)

然后我运行rake routes,我的命令提示:

You don't have any routes defined!  Please add some routes in config/routes.rb'
Run Code Online (Sandbox Code Playgroud)

这是我的routes.rb:

  Blog::Application.routes.draw do
  get "welcome/index"

  root 'welcome#index'
end
Run Code Online (Sandbox Code Playgroud)

ruby ruby-on-rails rails-routing

1
推荐指数
1
解决办法
1473
查看次数

如何在页面上创建指向锚点的路由?

导轨 4.2。我有一个单页网站,index.html.erb,控制器:访客。导航链接为“关于”、“服务”、“定价”等,导航链接如下:

  • <%= link_to "About", 锚点:"section2" %>
  • <%= link_to "Services", 锚点: "section3" %>
  • <%= link_to "定价",锚点:"section4" %>
  • 每个链接都有效,但网址看起来像这样 http://domain.com/#section2

    我希望 url 如下所示,我希望匹配的单词“About”指向选定的锚点 http://domain.com/about

    我在 routes.rb 中尝试了其中的一些变体,但没有任何效果。匹配 'about', to: 'visitors#index', 锚点: "section2", via: :get

    我还尝试在访问者控制器中进行重定向,关于操作如下redirect_to action: "index", anchor: "section2"

    似乎没有任何效果。有任何想法吗?

    ruby-on-rails rails-routing link-to ruby-on-rails-4.2

    1
    推荐指数
    1
    解决办法
    2538
    查看次数

    更改:id默认资源标识符

    Airport模型我primary_key用作机场国际代码,但Rails仍然:id在请求中使用.

    我已经开始了 airport.rb

    self.primary_key = 'code'
    
    Run Code Online (Sandbox Code Playgroud)

    并在 airports_controller.rb

    def show
      @airport = Airport.find(params[:code])
    end
    
    Run Code Online (Sandbox Code Playgroud)

    但是当我试图获得时domain.com/airports/led,我会收到:

    找不到没有身份证的机场

    在请求参数我有

    {"action"=>"show", "controller"=>"airports", "id"=>"led"}
    
    Run Code Online (Sandbox Code Playgroud)

    如果我将控制器更改params[:code]params[:id]可行,但我不想以这种方式使用它,因为我id在DB中没有列.

    ruby-on-rails params rails-routing ruby-on-rails-4

    1
    推荐指数
    1
    解决办法
    638
    查看次数

    如何避免rails“显示”路线中的序数、整数路线(增量ID)?

    最简单的 MRE 是rails g scaffold users

    当我们创建用户时,他们的 id 将为 1、2、3、4 等,他们的“显示”路线将为/show/:id

    有时我们不希望网站的用户确切地知道我们有多少用户 - 有没有一种简单的方法来混淆这一点?

    我可以想出一种手动执行此操作的方法,方法是在注册时添加一个附加列,其中包含随机 12 位整数,同时还要检查随机生成的整数是否尚不存在。

    但我想知道有没有更聪明的方法?

    笔记

    • 一个例子:https ://www.youtube.com/watch?v=Gzj723LkRJY (其中Gzj723LkRJY可能是随机生成的并且不可预测)

    • 为什么增量 id 可能不是一个好主意的示例(从 2m 52s 开始大约需要 30 秒)

      许多设计糟糕的网站都使用增量计数器。它可能会告诉你的竞争对手你有多少客户。它可能会让人们轻松下载你的所有记录

    • ..以及为什么增量 ID/路由可能不好的另一个例子:

    每个帖子都带有一个数字 ID,该 ID 从最近发布的帖子的 ID 开始递增

    ruby-on-rails rails-routing

    1
    推荐指数
    1
    解决办法
    291
    查看次数

    如何手动(而不是通过控制器向导)向rails应用程序中的ruby中的控制器添加视图?

    我正在使用Ruby mine在rails应用程序上构建ruby.一切都很好.我创建了新项目,然后按Ctrl + Alt + G. 从发电机选项我选择控制器.然后我得到一个窗口,我必须在其中命名控制器和操作.当我选择不同的动作时,会在以我的动作命名的控制器中创建相应的功能.如果我按下该功能名称左​​侧的图标,我会获得为具有extension.html.erb的特定功能打开的视图文件.这很好.但是,如果我忘记在控制器对话框中添加一个或多个动作,该怎么办?然后据说我必须添加一个名称是我想要的视图的函数.即

    def functionname
    
    end
    
    Run Code Online (Sandbox Code Playgroud)

    现在当我点击这个功能名的左侧时.我可以选择创建扩展名为.html.erb的文件.所有这一切都很好.但是,当我构建此应用程序并尝试访问此新创建的视图时,我收到以下错误

        Routing Error
    No route matches [GET] "/say_hello/sona"
    Try running rake routes for more information on available routes.
    
    Run Code Online (Sandbox Code Playgroud)

    如何向控制器添加视图,除了使用该控制器向导?之后我不能添加视图吗?`

    ruby-on-rails rubymine rails-routing

    0
    推荐指数
    1
    解决办法
    4481
    查看次数

    root的路由给出"无法将String转换为Hash"?

    我正试图将'/'路由到我的选举控制器和新动作:

    Awesomevote::Application.routes.draw do
    
      root 'election#new'
      resources :elections, :path => "vote"
    
    Run Code Online (Sandbox Code Playgroud)

    这产生了一个错误:

    can't convert String into Hash
    
    Run Code Online (Sandbox Code Playgroud)

    ruby-on-rails rails-routing ruby-on-rails-3

    0
    推荐指数
    1
    解决办法
    1104
    查看次数

    Rails在资源中嵌套范围块

    我想创建一个路径product/:id/monthly/revenue/,并product/:id/monthly/items_sold和等效命名路由product_monthly_revenueproduct_monthly_items_sold,这些路由只会显示图表.我试过了

    resources :products do
        scope 'monthly' do
            match 'revenue', to: "charts#monthly_revenue", via: 'get'
            match 'items_sold', to: "charts#monthly_items_sold", via: 'get'
        end
    end
    
    Run Code Online (Sandbox Code Playgroud)

    但这给了我路线:

    product_revenue    GET    /monthly/products/:product_id/revenue(.:format)    charts#monthly_revenue
    product_items_sold GET    /monthly/products/:product_id/items_sold(.:format) charts#monthly_items_sold
    
    Run Code Online (Sandbox Code Playgroud)

    其中monthly在前面被所附代替,以及路线命名是关闭的.我知道我可以这样做:

    resources :products do
        match 'monthly/revenue', to: "charts#monthly_revenue", via: 'get', as: :monthly_revenue
        match 'monthly/items_sold', to: "charts#monthly_items_sold", via: 'get', as: :monthly_items_sold
    end
    
    Run Code Online (Sandbox Code Playgroud)

    但这不是DRY,当我尝试添加更多像年度这样的类别时会变得很疯狂.当我想将所有图表合并到一个控制器中时,使用命名空间会强制我为每个命名空间创建一个新控制器.

    所以我想总结的问题是:是否可以在没有namspacing控制器的情况下命名路由?或者是否可以合并命名路线类别的创建?

    编辑:使用

    resources :products do
      scope "monthly", as: :monthly, path: "monthly" do
        match 'revenue', to: "charts#monthly_revenue", via: …
    Run Code Online (Sandbox Code Playgroud)

    ruby-on-rails rails-routing ruby-on-rails-4

    0
    推荐指数
    1
    解决办法
    2343
    查看次数

    Rails:由不正确的控制器操作处理的URL

    我有一个由错误的控制器操作处理的URL.在我的路线文件中,我有以下内容

    post '/tweets' => 'tweets#create'
    
    Run Code Online (Sandbox Code Playgroud)

    每当我发布到这个网址时,它都会被处理tweets#index.

    Started POST "/tweets" for 127.0.0.1 at 2014-03-27 20:04:25 -0700
    Processing by TweetsController#index as HTML
      Parameters: {"utf8"=>"?", "authenticity_token"=>"CCN9rDQiSXkVK0sF/BGU19fIufJTpho/ocySPmu7Lsc=", "tweet"=>{"title"=>"sdfdsafdsa", "description"=>"sdfdsasdadsa", "user_id"=>"1"}, "commit"=>"Create Tweet"}
      Tweet Load (0.4ms)  SELECT `tweets`.* FROM `tweets` 
      Rendered tweets/index.html.erb within layouts/application (0.1ms)
    Completed 200 OK in 42ms (Views: 40.6ms | ActiveRecord: 0.4ms)
    
    Run Code Online (Sandbox Code Playgroud)

    我试过重新启动我的rails服务器但它仍然无法正常工作.

    这是结果 rake routes

    tweeter: rake routes
            new_user_session GET    /users/sign_in(.:format)       devise/sessions#new
                user_session POST   /users/sign_in(.:format)       devise/sessions#create
        destroy_user_session DELETE /users/sign_out(.:format)      devise/sessions#destroy
               user_password POST   /users/password(.:format)      devise/passwords#create
           new_user_password GET    /users/password/new(.:format)  devise/passwords#new
          edit_user_password …
    Run Code Online (Sandbox Code Playgroud)

    ruby ruby-on-rails rails-routing ruby-on-rails-3

    0
    推荐指数
    1
    解决办法
    446
    查看次数

    Rails Wicked Gem - 了解路由

    好吧,所以我真的不了解邪恶的宝石中的嵌套路由.

    到目前为止,我有这个.我不确定是否所有内容都在正确的文件夹中,或者我是否正确.

    的routes.rb

    resources :events   
    resources :events do
      resources :build, controller: 'events/build' 
    end
    
    Run Code Online (Sandbox Code Playgroud)

    控制器/ events_controller.rb

     def create
            @event = Event.new(event_params)
            if @event.save
                flash[:success] = "Event Created!"
                redirect_to event_build_path(event_id: "event", id: @event.id) 
                # previously had redirect_to event_build_path without parameters)
            else
                render 'new'
            end
        end
    
    Run Code Online (Sandbox Code Playgroud)

    控制器/活动/ build_controller.rb

    class Events::BuildController < ApplicationController
        include Wicked::Wizard
    
        steps :details, :visibility
    
        def show
            @event = Event.find(params[:event_id])
            render_wizard
        end
    end
    
    Run Code Online (Sandbox Code Playgroud)

    意见/编译/ details.html.erb

    <%= form_for @event do |f| %>
    #blab blah 
    <% end %>
    
    Run Code Online (Sandbox Code Playgroud)

    我一开始event_build_path没有参数,我有这个错误 No route …

    ruby ruby-on-rails rails-routing wicked-gem

    0
    推荐指数
    1
    解决办法
    1517
    查看次数

    如何正确定义Rails路由,以便资源的某些操作转到一个控制器而另一些转到另一个控制器?

    我的应用程序有products,categoriessubcategries.我在网址/dash上有一个管理界面来编辑这些详细信息.我试着像这样设置网址:

    • 产品在网址下创建,更新,销毁和索引 /dash/products
    • 产品展示如下 /products/porduct-code
    • 类别显示在 /category-name
    • /dash/editcategories指向动作的类别编辑列表editcategories
    • 子类别显示在 category-name/subcategory-name
    • 编辑也属于上面的类别
    • 类别和子类别创建,更新,删除和索引全部 /dash

    当我试图解决一件事时,另一件事打破了.我的整个路线文件变得一团糟.试图解决它们,事情不会奏效.这是我的路线文件:

    Rails.application.routes.draw do
    
        # Pages
        root 'pages#home'
        get 'terms' => 'pages#termsandconditions'
        get 'delivery-charges' => 'pages#deliverycharges'
        get 'search' => 'pages#search'
        get 'deals' => 'pages#alldeals'
        get 'contact', to: 'pages#contact'
        post 'contact', to: 'pages#contactscreate'
        get 'dealslist' => 'pages#dealslist'
    
        get 'cart' => 'carts#cart'
    
        get 'rate' => 'districtrates#rate'
        get 'deliverycharges' => 'districtrates#deliverycharges'
        get 'pricecalc' => 'pages#pricecalc'
    
        # Devise routes
    
        # Others
        resources …
    Run Code Online (Sandbox Code Playgroud)

    ruby-on-rails rails-routing ruby-on-rails-4

    0
    推荐指数
    1
    解决办法
    1305
    查看次数