0

最近、Rails アプリに名前空間を追加しました。所有者にメールを送信するフォームがありましたが、処理中に壊れたようです (下部のエラー)。フォームにはモデルがなく、メールを開始するだけです。

ここに私のルートファイルがあります

scope ":locale", locale: /#{I18n.available_locales.join("|")}/ do
  namespace :admin do
    resources :email_owners do
      collection do
       get :email
       get :islas
       post :email
       post :islas
       end
      end
    end
  match "*path", to: "sites#not_found" # handles /en/fake/path/whatever
  end
root to: redirect("/#{I18n.default_locale}") # handles /
match '*path', to: redirect("/#{I18n.default_locale}/%{path}")
end

rake ルートの出力 CONTROLLER=admin/email_owners

email_admin_email_owners GET    /:locale/admin/email_owners/email(.:format)    {:locale=>/en|es/, :action=>"email", :controller=>"admin/email_owners"}
islas_admin_email_owners GET    /:locale/admin/email_owners/islas(.:format)    {:locale=>/en|es/, :action=>"islas", :controller=>"admin/email_owners"}
                     POST   /:locale/admin/email_owners/email(.:format)    {:locale=>/en|es/, :action=>"email", :controller=>"admin/email_owners"}
                     POST   /:locale/admin/email_owners/islas(.:format)    {:locale=>/en|es/, :action=>"islas", :controller=>"admin/email_owners"}
  admin_email_owners GET    /:locale/admin/email_owners(.:format)          {:locale=>/en|es/, :action=>"index", :controller=>"admin/email_owners"}
                     POST   /:locale/admin/email_owners(.:format)          {:locale=>/en|es/, :action=>"create", :controller=>"admin/email_owners"}
new_admin_email_owner GET    /:locale/admin/email_owners/new(.:format)      {:locale=>/en|es/, :action=>"new", :controller=>"admin/email_owners"}
edit_admin_email_owner GET    /:locale/admin/email_owners/:id/edit(.:format) {:locale=>/en|es/, :action=>"edit", :controller=>"admin/email_owners"}
   admin_email_owner GET    /:locale/admin/email_owners/:id(.:format)      {:locale=>/en|es/, :action=>"show", :controller=>"admin/email_owners"}
                     PUT    /:locale/admin/email_owners/:id(.:format)      {:locale=>/en|es/, :action=>"update", :controller=>"admin/email_owners"}
                     DELETE /:locale/admin/email_owners/:id(.:format)      {:locale=>/en|es/, :action=>"destroy", :controller=>"admin/email_owners"}

アプリ/コントローラー/管理者/email_owners.rb

class Admin::EmailOwnersController < Admin::BaseController
  def email
  owner_type = params[:owner_type]
  subject = params[:subject]
  message = params[:message]

    owners = User.owners
    owners.each do |owner|
      OwnerMailer.all_owners(owner, subject, message).deliver
    end 
      flash[:notice] = "Email has been sent to all Owners"
      redirect_to admin_sites_path
  end 
end

ここに問題がある私のフォームがあります。

<%= form_tag [:admin, email_admin_email_owners_path] do %>
To:
  <%= radio_button_tag "owner_type", "All" %> All Owners |
  <%= radio_button_tag "owner_type", "FullTime" %> FullTime |
  <%= radio_button_tag "owner_type", "PartTime" %> PartTime<br />
  <%= text_field_tag "subject", "Subject" %><br />
  <%= text_area_tag "message", "Message" %><br />
  <%= submit_tag "Send Email" %>
<% end %>

ルート/パスに行くたびに
(http://localhost:3000/en/admin/email_owners/email)

エラーが発生します

undefined method `admin_/en/admin/email_owners/email_path' for #<#<Class:0x789db30>:0x789ab78>

しかし、理由はわかりません。何か案は?間違ったパスを呼び出していますか? ありがとう

4

1 に答える 1

0

form_tag は最初の引数として URL を取るので、行きたいルートだけを指定する必要があります:

<%= form_tag email_admin_email_owners_path do %>

Rails は角括弧をショートカットとして使用して、文字列、シンボル、またはオブジェクトからネストされたパスを生成します[:admin, :email]admin_email_path

角かっこを使用[:admin, email_admin_email_owners_path]してこの URL を生成すると、次の 2 つのことが起こりました。

  1. email_admin_email_owners_path は「/en/admin/email_owners/email」を返します
  2. :admin を使用して角括弧内で評価する admin_/en/admin/email_owners/email_pathと、未定義のメソッドが得られます
于 2012-04-20T09:02:55.933 に答える