标签: rails-routing

rails app中静态页面的最佳做法

我正在开发一个用于本地业务的ruby on rails应用程序.页面是"静态的",但可以通过我为他们构建的后端CMS进行更改.是否有为静态页面创建控制器的最佳实践?现在我有一个包含所有静态路由的站点控制器,就像这样.

的routes.rb

get "site/home"
get "site/about_us"
get "site/faq"
get "site/discounts"
get "site/services"
get "site/contact_us"
get "site/admin"
get "site/posts"
Run Code Online (Sandbox Code Playgroud)

或者我会更好地为这样的站点控制器创建成员路由,而不是因为"站点"不需要CRUD.

resources :sites, :except => [:index, :new, :create, :update, :destroy]
member do
  get :home
  get :about_us
  get :faq
  get :discounts
  get :services
  get :contact_us
  get :admin
  get :posts
end
Run Code Online (Sandbox Code Playgroud)

还是有最好的做法/更好的方法?任何答案将不胜感激.谢谢

ruby-on-rails rails-routing

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

为什么rails应用程序意外重定向而不是匹配路由?

我之前提过这个问题并认为它是固定的,但事实并非如此.先前的问题在这里

我的问题是我试图设置我的路线,以便在我输入时

本地主机:3000 /网站/管理

应该重定向到

本地主机:3000/EN /网站/管理

这是我的routes.rb文件

scope ":locale", locale: /#{I18n.available_locales.join("|")}/ do
  get "log_out" => "sessions#destroy", as: "log_out"
  get "log_in" => "sessions#new", as: "log_in"

  resources :sites, except: [:new, :edit, :index, :show, :update, :destroy, :create]   do
  collection do
    get :home
    get :about_us
    get :faq
    get :discounts
    get :services
    get :contact_us
    get :admin
    get :posts
  end
end
resources :users
resources :abouts
resources :sessions
resources :coupons
resources :monthly_posts
resources :reviews
resources :categories do
collection { post :sort }
resources …
Run Code Online (Sandbox Code Playgroud)

ruby-on-rails rails-routing

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

Strange Rails资源路由行为

我遇到了奇怪的错误.我不确定这是错误.但是我之前从未遇到过这种奇怪的行为.

resource :watches
Run Code Online (Sandbox Code Playgroud)

制作这样奇怪的路由表:

        watches POST   /watches(.:format)                         watches#create
    new_watches GET    /watches/new(.:format)                     watches#new
   edit_watches GET    /watches/edit(.:format)                    watches#edit
                GET    /watches(.:format)                         watches#show
                PUT    /watches(.:format)                         watches#update
                DELETE /watches(.:format)                         watches#destroy
Run Code Online (Sandbox Code Playgroud)

因为你没有看到ID参数和混乱的动作

在同一时间:

resources :mibs
Run Code Online (Sandbox Code Playgroud)

制定正确的路线

           mibs GET    /mibs(.:format)                            mibs#index
                POST   /mibs(.:format)                            mibs#create
        new_mib GET    /mibs/new(.:format)                        mibs#new
       edit_mib GET    /mibs/:id/edit(.:format)                   mibs#edit
            mib GET    /mibs/:id(.:format)                        mibs#show
                PUT    /mibs/:id(.:format)                        mibs#update
                DELETE /mibs/:id(.:format)                        mibs#destroy
Run Code Online (Sandbox Code Playgroud)

我认为这可能是某种方式的变形问题,但尝试使用"火箭"而不是"手表"给出相同的结果:

        rockets POST   /rockets(.:format)                         rockets#create
    new_rockets GET    /rockets/new(.:format)                     rockets#new
   edit_rockets GET    /rockets/edit(.:format)                    rockets#edit
                GET    /rockets(.:format)                         rockets#show
                PUT    /rockets(.:format)                         rockets#update
                DELETE /rockets(.:format)                         rockets#destroy …
Run Code Online (Sandbox Code Playgroud)

ruby-on-rails rails-routing

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

rails从网址中删除控制器路径

我认为我有以下循环

<% @posts.each do |post| %>
     <%= link_to post do %>
           Some html
     <% end %>
<% end %>
Run Code Online (Sandbox Code Playgroud)

上面的代码将生成链接为 localhost:3000/posts/sdfsdf-sdfsdf

但我想把链接作为 localhost:3000/sdfsdf-sdfsdf

这是我的路线

  resources :posts, except: [:show]

  scope '/' do
    match ':id', to: 'posts#show', via: :get
  end
Run Code Online (Sandbox Code Playgroud)

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

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

为所有 Rails 路由设置默认值

在 Rails 中,您可以为一组路由(在命名空间内)指定默认值,如下所示:

Rails.application.routes.draw do
  # Other routes

  namespace :api, defaults: { format: :json } do
    resources :users
  end 
end
Run Code Online (Sandbox Code Playgroud)

如何将这样的默认值应用于应用程序中的所有路由?

ruby-on-rails rails-routing

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

Rails的资源已经'show'映射而没有ID,并创建/users.id链接而不是/ users/id

对于我当前的路由,以下ruby on rails代码:

<%= link_to current_user.name, users_path(current_user) %>
Run Code Online (Sandbox Code Playgroud)

它产生如下链接:

<a href="/users.1">name</a>
Run Code Online (Sandbox Code Playgroud)

反过来,Ruby on Rails很难理解这一点,因为它期望1格式为:

ActiveRecord::RecordNotFound in UsersController#show 
  Couldn't find User without an ID

Request
  Parameters: 
  {"format"=>"1"}
Run Code Online (Sandbox Code Playgroud)

对于Rails来说,这样做并不是很有意义,因为它更应该如此/users/1.但是,手动尝试这个结果会产生以下结果:

Routing Error
  No route matches "/users/1"
Run Code Online (Sandbox Code Playgroud)

每手输入带有?id = param的ID,如/users?id=1工作正常.

问题是,我不明白users.id的来源,也不知道如何修复 - 我的路由文件看起来像

routes::Application.routes.draw do
  get "register" => "users#new", :as => "register"
  get "login" => "sessions#new", :as => "login"
  post "login" => "sessions#create", :as => "do_login"
  get "logout" => "sessions#destroy", :as => "logout"

  resource :users

  root :to => …
Run Code Online (Sandbox Code Playgroud)

ruby-on-rails rails-routing

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

Rails POST表单到漂亮的URL

其中一个'我显然做错了'的时刻.感觉就像我正在尝试做一些基本的事情,并与框架作斗争,所以我很有吸引力!

我正在使用Rails 3,并且对于如何创建一个导致页面包含干净URL的搜索表单感到有些困惑.

我的应用程序允许您从任何位置的路线搜索到另一个位置.

例如,有效的URL将是/ routes/A/to/B /或/ routes/B.

我的routes.rb:

match 'routes/:from/to/:to' => 'finder#find', :as => :find
match 'routes/find' => 'finder#find'
Run Code Online (Sandbox Code Playgroud)

我的搜索表单:

<% form_tag('/routes, :method => 'post') do %>
  <%= label_tag(:from, "From:") %>
  <%= text_field_tag(:from) %>
  <%= label_tag(:to, "To:") %>
  <%= text_field_tag(:to) %>
  <%= submit_tag("Go") %>
<% end %>
Run Code Online (Sandbox Code Playgroud)

控制器:

class FinderController < ApplicationController
  def index
  end

  def find
    if params[:from].blank? or params[:to].blank?
      render :action => "invalid_results" and return
    end
    @from = Location.find_by_code(params[:from].upcase)
    @to = Location.find_by_code(params[:to].upcase)
    if @from.nil? or @to.nil?
      render …
Run Code Online (Sandbox Code Playgroud)

routes rails-routing ruby-on-rails-3

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

与搜索表单相关的Rails路由

在我最新的网站上,我有一个定义如下的搜索表单:

= form_tag search_path(:termen), :method => :get do
  = text_field_tag :termen, params[:termen]
  = submit_tag "Search »"
Run Code Online (Sandbox Code Playgroud)

一条路线:

# search
get "search(/:termen)" => "articole#cauta", :as => :search
Run Code Online (Sandbox Code Playgroud)

我想当我按下搜索按钮以获得如下网址:

http://www.mysite.com/search/[the_termn_that_was_typed]
Run Code Online (Sandbox Code Playgroud)

所以例如当我在搜索"吸血鬼"时,我应该得到:

http://www.mysite.com/search/vampire
Run Code Online (Sandbox Code Playgroud)

有关这一个的线索吗?

非常感谢,

ruby-on-rails rails-routing

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

Rails捕获所有路由,不包括资源和HTML

我正在使用Angular html5mode,所以让Rails路由设置将所有失败的请求重定向到root

# Angular catch all to allow page refresh
get '*page' => "home#index"
Run Code Online (Sandbox Code Playgroud)

这很好用,除非Angular模块请求丢失的模板(例如/assets/templates/page.html),当它导致无限循环时

除了/assets中的内容之外,我怎么能告诉Rails捕获所有路由?

ruby-on-rails rails-routing angularjs

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

在rails中显示路由错误的404页面

我试图在rails中呈现集成的404页面作为例外.我试过这个,但仍然得到路由错误页面:

posts_controller.rb

def destroy
if current_user.username == @post.email 
@post.destroy
respond_to do |format|
  format.html { redirect_to posts_url }
  format.json { head :no_content }
end
else
  not_found
end
Run Code Online (Sandbox Code Playgroud)

application_controller.rb

 def not_found
  raise ActionController::RoutingError.new('Not Found')
end 
Run Code Online (Sandbox Code Playgroud)

的routes.rb

 Booklist::Application.routes.draw do
 get "pages/faq"
 get "pages/about"
 devise_for :users
 resources :posts

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

视图:

<% if current_user.username == post.email %>
  <font color="red">This is your post! Feel free to edit or delete it. ->  </font>
    <%= link_to 'Edit', edit_post_path(post) %>
    <%= link_to 'Destroy', post, method: :delete, data: …
Run Code Online (Sandbox Code Playgroud)

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

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