我正在开发一个用于本地业务的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)
还是有最好的做法/更好的方法?任何答案将不胜感激.谢谢
我之前提过这个问题并认为它是固定的,但事实并非如此.先前的问题在这里
我的问题是我试图设置我的路线,以便在我输入时
本地主机: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) 我遇到了奇怪的错误.我不确定这是错误.但是我之前从未遇到过这种奇怪的行为.
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) 我认为我有以下循环
<% @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) 在 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代码:
<%= 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) 其中一个'我显然做错了'的时刻.感觉就像我正在尝试做一些基本的事情,并与框架作斗争,所以我很有吸引力!
我正在使用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) 在我最新的网站上,我有一个定义如下的搜索表单:
= 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)
有关这一个的线索吗?
非常感谢,
我正在使用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捕获所有路由?
我试图在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)