【问题标题】:Rails routing issues and questionsRails 路由问题和疑问
【发布时间】:2013-07-04 17:15:44
【问题描述】:

我一直在尝试从外向内读取导轨布线,但失败得很惨。我相信我想做的是非常基本的,但无论出于何种原因,我都无法弄清楚。这是情况。

我希望我的网址读取 www.example.com/maps 而不是他们现在正在做的事情 www.example.com/maps/map 这是控制器然后查看名称。

我的路线如下所示。

homepages GET    /homepages(.:format)                   homepages#index
              POST   /homepages(.:format)                   homepages#create
 new_homepage GET    /homepages/new(.:format)               homepages#new
edit_homepage GET    /homepages/:id/edit(.:format)          homepages#edit
     homepage GET    /homepages/:id(.:format)               homepages#show
              PUT    /homepages/:id(.:format)               homepages#update
              DELETE /homepages/:id(.:format)               homepages#destroy
         root        /                                      homepages#index
         maps GET    /maps(.:format)                        maps#index
              POST   /maps(.:format)                        maps#create
      new_map GET    /maps/new(.:format)                    maps#new
     edit_map GET    /maps/:id/edit(.:format)               maps#edit
          map GET    /maps/:id(.:format)                    maps#show
              PUT    /maps/:id(.:format)                    maps#update
              DELETE /maps/:id(.:format)                    maps#destroy
   work_index GET    /work(.:format)                        work#index
              POST   /work(.:format)                        work#create
     new_work GET    /work/new(.:format)                    work#new
    edit_work GET    /work/:id/edit(.:format)               work#edit
         work GET    /work/:id(.:format)                    work#show
              PUT    /work/:id(.:format)                    work#update
              DELETE /work/:id(.:format)                    work#destroy
contact_index GET    /contact(.:format)                     contact#index

我尝试做类似资源 :maps, :path => '' 之类的操作,但是当我访问我的网站时,url 看起来是一样的。是不是因为我视图上的代码看起来像

<li class="current_page_item"><%= link_to "Bio", :controller => :homepages, :action => :index %></li>
                <li><%= link_to "Work", :controller => :work, :action => :experience %></li>
                <li><%= link_to "Map", :controller => :maps, :action => :map %></li>
                <li><%= link_to "Contact", :controller => :contact, :action => :email %></li>

还是因为我的路线错了?

我的路线文件目前看起来像

Me::Application.routes.draw do
  resources :homepages
  root :to => 'homepages#index'

  resources :maps

  resources :work

  resources :contact

  resources :media

感谢您的帮助!

【问题讨论】:

  • 2 语句:1)为什么不使用_url_path 辅助方法来生成链接? 2)您正在链接到您的路线中未定义的mapexperience 等操作。
  • 谢谢!不知道那些帮手。老实说,我不完全确定那里的地图和经验如何。好像我有地图和地图?

标签: ruby-on-rails ruby-on-rails-3 routes


【解决方案1】:

在我看来,您应该阅读一些关于 Routes 及其在 Rails 宏伟计划中的作用的内容

你可以从这里开始 http://guides.rubyonrails.org/routing.html

你也可以看一些 RailCast 以便完全掌握路线的含义 这有点棘手,但是当您理解它时,它就完全有意义了

如果您希望“地图”链接转到特定地图,您应该更改

<%= link_to "Map", :controller => :maps, :action => :map %>

<%= link_to "Map", @map %>

其中@map 是您在控制器中初始化的地图的变量

如果您希望“地图”链接转到地图索引页面并显示所有地图,您应该更改

<%= link_to "Map", :controller => :maps, :action => :map %>

<%= link_to "Map", maps_path %>

【讨论】:

  • 谢谢!当我更改为 我看到我的 url 正在按照我想要的方式工作。唯一的问题是我得到了未初始化的常量 MapsController::Map。我也不完全确定为什么……
  • 1.您是否在 MapsController 中定义了索引方法?在这种方法中,您应该选择您希望在索引视图中显示的所有地图 - 例如将其放在名为“@maps”的变量中 2. 您应该在 views\maps 文件夹下定义 index.html.erb 视图文件并与“@maps”变量有关
【解决方案2】:

这就是 REST 资源和 URL 的定义方式。阅读here

在您的 routes.rb 文件中执行以下操作时:

resource :maps

您是在告诉 rails 为您生成以下操作的默认路由:

  • 索引 => GET /maps
  • 显示 => GET /maps/1
  • 新 => GET /maps/new
  • 创建 => POST /maps
  • 编辑 => GET /maps/1
  • 更新 => PUT /maps/1
  • 摧毁 => DELETE /maps/1

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多