2012-04-19 1 views
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 

Вывод рейк маршрутов CONTROLLER = админ/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: // локальный: 3000/EN/администратор/email_owners/электронная почта)

Я получаю ошибку

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

Но Я не уверен, почему. Есть идеи? Я называю неправильный путь? Благодаря

+2

Try <% = form_tag email_admin_email_owners_path делать%> – iverds

+0

Это сработало, спасибо. Опубликовать это как ответ? – ruevaughn

ответ

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 произошли две вещей:

  1. email_admin_email_owners_path возвращает '/ EN/админ/email_owners/электронную почту'
  2. оценивается в пределах квадратных скобок с: админом затем дает вам admin_/en/admin/email_owners/email_path, который является undifined методы
+0

Спасибо за то, что вышли за рамки и объяснили это для меня. Я ценю это! – ruevaughn