我正在阅读"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) 导轨 4.2。我有一个单页网站,index.html.erb,控制器:访客。导航链接为“关于”、“服务”、“定价”等,导航链接如下:
每个链接都有效,但网址看起来像这样 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"
似乎没有任何效果。有任何想法吗?
在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中没有列.
最简单的 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 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)
如何向控制器添加视图,除了使用该控制器向导?之后我不能添加视图吗?`
我正试图将'/'路由到我的选举控制器和新动作:
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) 我想创建一个路径product/:id/monthly/revenue/,并product/:id/monthly/items_sold和等效命名路由product_monthly_revenue和product_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) 我有一个由错误的控制器操作处理的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) 好吧,所以我真的不了解邪恶的宝石中的嵌套路由.
到目前为止,我有这个.我不确定是否所有内容都在正确的文件夹中,或者我是否正确.
的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 …
我的应用程序有products,categories和subcategries.我在网址/dash上有一个管理界面来编辑这些详细信息.我试着像这样设置网址:
/dash/products/products/porduct-code/category-name/dash/editcategories指向动作的类别编辑列表editcategoriescategory-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)