Tag: 路由

如何直接创建到范围的链接/路由?

所以我有一个Post模型,它有以下范围: scope :unconfirmed, -> { where( status: “unconfirmed”) } scope :corroborated, -> { where( status: “corroborated”) } scope :confirmed, -> { where( status: “confirmed”) } 我想要做的是当有人去posts/confirmed它显示所有确定的范围。 这样做最优雅的方法是什么? 另外,如何在routes.rb为每个范围创建路径? 编辑1 我知道一种方法是在我的posts控制器中为每个可枚举的范围创建一个动作(即unconfirmed等)。 但我宁愿在我的索引操作中完成所有这些 – 所以我正在渲染并使用我的索引视图。 我试过在我的Post#Index这样做: if params[:unconfirmed] @posts = Post.published.unconfirmed end 但这只是给我一个路由错误。 这是错误: Started GET “/unconfirmed” for 127.0.0.1 at 2014-10-27 02:29:51 -0500 Processing by PostsController#show as […]

Rails创建操作不起作用

我的简单表单不是POST。 我一直在看这个并且无法看到什么是错的(我确信它在我的路线中)。 这就是我所拥有的: 视图: views/buyers/new.html.erb 控制器: BuyersController def new @title = “Welcome to Car Finder” @buyer = Buyer.new end def create @buyer = Buyer.new(params[:buyer]) if @buyer.save! redirect_to success else redirect_to :back end end 路线: resources :buyers 耙路线: buyers GET /buyers(.:format) buyers#index POST /buyers(.:format) buyers#create new_buyer GET /buyers/new(.:format) buyers#new edit_buyer GET /buyers/:id/edit(.:format) buyers#edit buyer GET /buyers/:id(.:format) […]

路由和复选框从rails 1.xx更新到3.2.8

正好是由Ryan Bates(http://railscasts.com/episodes/52-update-through-checkboxes)检查这一集,看起来Rails 3.2.x有不同的设置。 因此map.resources :tasks, :collection => { :complete => :put }不会产生预期的结果,因为它会导致complete_tasks_path不存在的问题。 能告诉我如何在这种特殊情况下自定义路由吗? 似乎check_box_tag除了Ryan check_box_tag需要不同的属性。 因为它回写unexpected kEND… 任何帮助赞赏

Rails中的简单路由

我正在尝试从User Show视图中销毁链接。 所以来自/users/1 , 我想在teacher_student_links控制器中访问destroy动作。 第一次尝试: “teacher_student_links”, :action => “destroy”, :id => @user.id %> 这会失败,因为它在指定的控制器中路由到“show”操作。 所以第一个问题:为什么它指向“展示”行动而不是“破坏”? 我试图用括号括起上面的内容,并且也得到了一个毫无意义的错误。 第二次尝试: 在config / routes.rb中 match ‘/bye_teacher’ => ‘teacher_student_links#destroy’ 视图 @user.id %> 也尝试过, @user %> 两行都正确指向指定的控制器和操作,但参数未传入。(找不到没有ID错误的用户) 第二个问题: 在这种情况下我是否以错误的方式传递变量? 问这两个问题有点尴尬,但我想知道这些问题背后的原因。 更新: @user), :method => :delete %> 给 没有路线匹配[DELETE]“/ teacher_student_links” :delete %> 给 No route matches [DELETE] “/teacher_student_links.1” ……所以我跑了 rake routes […]

Rails路由到新的关联模型

我有一个应用程序,有家庭访问我的机构,我每次访问家庭时都会记录。 我在家庭索引中选择家庭并打开我的索引中访问模型中的访问视图以选择家庭并创建新访问我在家庭的索引视图中使用以下代码: = link_to ‘Visit’, new_household_visit_path(household), class: ‘btn btn-mini’ Rake Routes节目: new_household_visit GET /households/:household_id/visits/new(.:format) visits#new 这会将我带到包含以下url的表单: http://localhost:3000/households/5/visits/new 我在此视图中设置了一个简单的表单,如下所示: = simple_form_for [household, visit], url: new_household_visit_path do |f| %h2 Household: #{household.name} 现在,当我填写表单并尝试使用提交保存时,我得到: No route matches [POST] “/households/5/visits/new” 现在我注意到在Rake Routes中我有一个GET而不是POST但是我仍然不确定我的问题是什么? Routes.rb显示: resources :households do resources :visits resources :neighbors end 我将简单的表单调用改为: = simple_form_for [household, visit], url: household_visits_path do |f| […]

URI上带点的参数

在我的应用程序中,有一个来自machine:ip的资源,机器和嵌套资源。 我希望能够访问输入IP地址的IP的URI。 URI应该是这样的: /machines/m123/ips/192.168.0.1.xml 其中“m123”是机器的名称,“192.168.0.1”是该机器的ips之一。 这里的问题是rails错过了ip和格式的点。 当我尝试访问此页面时,我得到: No route matches “/machines/m123/ips/192.168.0.1.xml” 如果我替换任何其他角色的点,它会起作用,这意味着rails不会处理URI上的点。 有没有办法在路线上输入更复杂的正则表达式,以确保铁路可以按照我想要的方式对待它? 我正在使用rails 2.3.5和ruby 1.8.7。 谢谢。

Rails通配符路由与数据库查找和多个控制器

我有一个Rails应用程序设置,在定义了所有其他站点路由后,我有一个全能通配符供我的用户在非保留路径/关键字的选定根级别“虚荣”URL上显示其配置文件: get ‘*path’ => ‘profiles#show’ 然后,Profiles控制器检查以确保路径定义有效的Profile,否则重定向到root。 这很好用。 我现在需要做的是创建一种机制,其中catch-all 路径可以定义Profile 或 Blog,基于数据库查找适当控制器路由到的路径 。 我不想进行重定向…我想在原始通配符URL上加载配置文件或博客内容。 我有什么选择从通配符路由 – > db lookup – >正确的控制器? 换句话说,这个逻辑可能在哪里适当? 谢谢。

ElegantRails – 一个控制器动作的多个路由

我想知道是否有更简洁或优雅的方式使用Rails将多个路由转换为一个控制器动作。 #routes.rb get ‘suggestions/proxy’, to: ‘suggestions#index’ get ‘suggestions/aimee’, to: ‘suggestions#index’ get ‘suggestions/arty’, to: ‘suggestions#index’ … #suggestion_controller.rb case request.env[‘PATH_INFO’] when ‘/suggestions/proxy’ @suggestions = Suggestion.all.where(:suggestion_type => ‘proxy’) when ‘/suggestions/aimee’ @suggestions = Suggestion.all.where(:suggestion_type => ‘aimee’) when ‘/suggestions/arty’ @suggestions = Suggestion.all.where(:suggestion_type => ‘arty’) … else @suggestions = Suggestion.all end 我已经读过这篇文章了 ,但是在使用它时我一直都会遇到错误。 如果在这里没有太多工作要做,这不是什么大问题。 我正在建立一个我喜欢玩的video游戏网站叫做Dirty Bomb ,总共需要列出19个雇佣兵,这就是为什么我想要一个更清洁的方式来做这件事。 谢谢。

Rails在function测试中找不到路由

Rails版本3.0.4和Ruby 1.9.2 我正在使用设计gem,并设置我的应用程序,以便用户必须登录才能执行任何操作。 在编写我的function测试时,我发现所有的测试都抛出了同样的错误。 `method_missing’: undefined method `new_user_session_path’ 这很奇怪,如果我rake routes我可以看到 new_user_session GET /devise/login(.:format) {:action=>”new”, :controller=>”devise/sessions”} 我还可以确认,当我运行应用程序时,所有link_to可以使用该路径。 对于某个控制器的测试来看其他路线,我有什么特别之处吗? 的routes.rb Nge::Application.routes.draw do resources :companies resources :users devise_for :users, :path => “devise”, :path_names => { :sign_in => ‘login’, :sign_out => ‘logout’, :password => ‘secret’, :confirmation => ‘verification’, :unlock => ‘unblock’, :registration => ‘register’, :sign_up => ‘cmon_let_me_in’ } … […]

如何在rails中保持CRUD和RESTFull(具体示例)

我很难保持我的控制器不会太复杂,并且我们在绞架时会创建rails创建的基本操作。 如果下面的方法是正确的,有人可以告诉我。 我有一个模型Project和那些基本路线: GET /projects -> Project#index GET /projects/new -> Project#new POST /projects -> Project#create GET /projects/:id -> Project#show GET /projects/:id/edit -> Project#edit PATCH /projects/:id -> Project#update PUT /projects/:id -> Project#update 现在我想允许用户接受该项目。 首先,他有一个摘要视图,他可以按下按钮,它应该改变模型中的某些值。 我的第一次尝试是 GET /projects/:id/accept -> Project#accept POST /projects/:id/accept -> Project#accept_update 这感觉不对劲。 所以我想知道我是否应该这样做: GET /projects/:id/accept -> Acceptations#new POST /projects/:id/accept -> Acceptations#create 但是,我的我的Acceptations控制器正在处理Project模型。 什么开始让我感到困惑。 最重要的是,如果我使用第二个选项,路径应该是/projects/:id/acceptations/new这对于最终用户来说似乎很长并且令人困惑。