【问题标题】:Rails: Calling a custom method with a form (with variables)Rails:使用表单(使用变量)调用自定义方法
【发布时间】:2013-10-15 02:08:56
【问题描述】:

我正在尝试使用此表单通过自定义方法将变量传递给我的控制器。它似乎不起作用。当我提交表单时,它没有显示页面加载或任何内容。

HAML 视图

= form_for :emails, :url=>{ :action => "make_admin", :controller => "member"}, :remote => true, :html => {:class => "form-inline"} do |f|
  .form-group
    %span
      %p{:style => "float: left;"}
        = f.label :email, "Email:"
        = f.text_field :email, :style=> "width: 200px;", :class => "form-control"
      %p{:style => "margin-left: 10px; float: left;"}
        = f.submit "Make Admin", :class => 'btn btn-success'

控制器 (member_controller.rb)

class MemberController < ApplicationController
  before_filter :authenticate_user!, :except => [:show, :index]
  layout "dashboard"

  def dashboard
    render :dashboard
  end

  def develop
  end

  def make_admin
    @this_user = User.find(params[:email])
    @this_user.update_attribute :admin, true
    redirect_to '/dashboard/develop'
  end
end

路线:

    Mvhomefront::Application.routes.draw do
  match '/dashboard' => redirect("/dashboard/volunteer"), via: 'get'
  match '/dashboard/volunteer', to: 'member#volunteer', via: 'get'
  match '/dashboard/events', to: 'events#index', via: 'get'
  match '/dashboard/about', to: 'member#about', via: 'get'

  resources :posts
  resources :events
  resources :signup
  resources :emails do
    get :make_admin
  end
  match '/dashboard/news', to: 'posts#new', via: 'get'
  match '/dashboard/officers', to: 'member#officers', via: 'get'
  match '/dashboard/develop', to: 'member#develop', via: 'get'
  match '/dashboard/manage_events', to: 'events#new', via: 'get'
  match '/dashboard/manage_hours', to: 'member#manage_hours', via: 'get'
  match '/dashboard/manage_users', to: 'member#manage_users', via: 'get'


  root :to => "home#index"
  match '/about', to: 'home#about', via: 'get'
  match '/news', to: 'posts#index', via: 'get'
  match '/officers', to: 'home#officers', via: 'get'

  devise_for :users, :controllers => {:omniauth_callbacks => "users/omniauth_callbacks", :registrations => "registrations"}, :path_names => { :sign_up => "register" }
  resources :users
end

【问题讨论】:

    标签: ruby-on-rails devise routes haml controllers


    【解决方案1】:

    由于您的form_for 方法中的:remote =&gt; true,您在提交表单时不会看到页面加载。这使得表单通过 ajax 提交,不会重新加载页面。

    【讨论】:

    • 哦,现在说 /dashboard 不存在。当我尝试提交到该方法时,这是页面的当前 URL。
    • @ShravMehta 是说/dashboard/develop 不存在,还是说/dashboard 不存在?如果没有您的其他路线,我无法判断问题会是什么......
    • 它说“没有路由匹配 [POST] "/dashboard"”我添加了完整的路由文件。
    • @ShravMehta 试着把get :make_admin 变成get :make_admin, to: 'member#make_admin', as: :make_admin。然后使用您的表单,您应该能够将路线用作:url =&gt; make_admin_path。希望这可以解决您遇到的问题。
    • 它仍然说 make_admin_path 不存在
    猜你喜欢
    • 2012-11-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-23
    • 1970-01-01
    • 2021-11-21
    • 2013-07-28
    相关资源
    最近更新 更多