【问题标题】:Rails partial render and devise actionRails 部分渲染和设计动作
【发布时间】:2012-12-10 05:52:18
【问题描述】:

例如,在我的 rails 应用程序中,我设计了注册操作 (http://*:3000/users/sign_up) 并出现错误:

No route matches {:controller=>"devise/vehicle_types", :action=>"search_vehicle_type"}

我认为这是因为我在设计路由的命名空间中......但是我通常如何呈现注册视图?我的布局部分看起来是这样的:

= render :partial => 'vehicle_types/findtype'   

还有这个部分:

.form
  = form_tag :controller => 'vehicle_types', :action => 'search_vehicle_type' do 
    = select("post", "MFA_ID", Manufacturer.all.collect {|p| [ p.MFA_BRAND, p.MFA_ID ] }, {:prompt => 'Марка'}, :class => "login-input man-select")
    = select_tag "models", options_for_select(['Модель', nil]), :class => "login-input mod-select", :prompt => 'Модель', :disabled => :true
    = select_tag "fueltype", options_for_select([['Тип топлива', nil], ['Не важно', nil], ['Бензин', 53302], ['Дизель', 53205], ['Газ', 53241], ['Гибрид', 55554], ['Электродвигатель', 52433]]), :class => "login-input fuel-select"
    = text_field_tag "year", nil, :placeholder => "Год выпуска", :class => "login-input"
    .submit-area
      .left
        = submit_tag "Выбор", :class => "orange-button"

在其他页面(非设计)上一切正常,但是当我去密码恢复或注册时,我得到了错误。但为什么?又该如何解决?

也是路线的一部分:

Oleg::Application.routes.draw do 
devise_for :users
match '/search_vehicle_type' => 'vehicle_types#search_vehicle_type'
root :to => 'pages#index'
end

我还在这里阅读了https://github.com/plataformatec/devise/issues/471 的链接,但是要如何进行部分操作呢?

rake routes | grep devise

new_admin_session GET    /admins/sign_in(.:format)                                                 devise/sessions#new
                  admin_session POST   /admins/sign_in(.:format)                                                 devise/sessions#create
          destroy_admin_session DELETE /admins/sign_out(.:format)                                                devise/sessions#destroy
                 admin_password POST   /admins/password(.:format)                                                devise/passwords#create
             new_admin_password GET    /admins/password/new(.:format)                                            devise/passwords#new
            edit_admin_password GET    /admins/password/edit(.:format)                                           devise/passwords#edit
                                PUT    /admins/password(.:format)                                                devise/passwords#update
      cancel_admin_registration GET    /admins/cancel(.:format)                                                  devise/registrations#cancel
             admin_registration POST   /admins(.:format)                                                         devise/registrations#create
         new_admin_registration GET    /admins/sign_up(.:format)                                                 devise/registrations#new
        edit_admin_registration GET    /admins/edit(.:format)                                                    devise/registrations#edit
                                PUT    /admins(.:format)                                                         devise/registrations#update
                                DELETE /admins(.:format)                                                         devise/registrations#destroy
               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 GET    /users/password/edit(.:format)                                            devise/passwords#edit
                                PUT    /users/password(.:format)                                                 devise/passwords#update
       cancel_user_registration GET    /users/cancel(.:format)                                                   devise/registrations#cancel
              user_registration POST   /users(.:format)                                                          devise/registrations#create
          new_user_registration GET    /users/sign_up(.:format)                                                  devise/registrations#new
         edit_user_registration GET    /users/edit(.:format)                                                     devise/registrations#edit
                                PUT    /users(.:format)                                                          devise/registrations#update
                                DELETE /users(.:format)                                                          devise/registrations#destroy

【问题讨论】:

  • rake routes 的输出是什么?
  • @PrakashMurthy 明天将展示...但它是标准的...
  • 通过更改路由使用form_tag 的命名路由,以便vehicle_types#search_vehicle_type 映射到命名路由。有关示例,请参见 stackoverflow.com/questions/2167896/…

标签: ruby-on-rails ruby routing partial-views


【解决方案1】:

虽然它可能不是最好的样式,但最简单的解决方法是在 form_tag 中使用实际路径:

.form
  = form_tag "/search_vehicle_type" do
  # Rest of the form

另一种选择是在您的 routes.rb 文件中命名路由:

match '/search_vehicle_type' => 'vehicle_types#search_vehicle_type', :as => :search_vehicle_type

然后在 form_tag 中使用该命名路由:

.form
  = form_tag search_vehicle_type_path do
  # Rest of the form

【讨论】:

  • search_vehicle_type 是部分的,我在布局中没有任何形式,只有部分 search_vehicle_type,我在布局中写:= render :partial => "blablabla/search_vehicle_type",所以我必须写它在这个偏?你是这个意思吗?
  • 另外,不要新问题,请给我建议:我有内置的设计控制器(还没有生成自己的)有没有办法实现recaptcha gem验证? (或者我需要创建控制器并设置 validate_recaptcha?)
  • 我指的不是你的部分名称。这里的问题是您的表单发布到一个不存在的路线,所以我建议您通过键入路径(第一个代码块)或命名它并使用名称(第二个和第三个代码块)来指定实际路线)。第二个代码块中使用的名称恰好与您的部分名称匹配,但可以是任何名称。关键是form_tag的path参数中使用了匹配行的“as”部分。
  • 现在一切正常……如果你给个名​​字,写起来也不错 = form_tag :search_vehicle_type
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-27
  • 1970-01-01
  • 2011-12-17
  • 1970-01-01
  • 2017-05-07
相关资源
最近更新 更多