2015-03-13 55 views
2

我收到此錯誤:Rails:如何解決ActionView :: MissingTemplate錯誤?

Started POST "/submitEmailAddress" for 127.0.0.1 at 2015-03-13 15:29:26 +0100 
Processing by OnepagerController#submitEmailAddress as JS 
    Parameters: {"utf8"=>"✓", "email"=>"[email protected]", "commit"=>"OK, LET'S GO!"} 
submitEmailAddress 
Completed 500 Internal Server Error in 12ms 

ActionView::MissingTemplate (Missing template onepager/submitEmailAddress, application/submitEmailAddress with {:locale=>[:en], :formats=>[:js, :html], :variants=>[], :handlers=>[:erb, :builder, :raw, :ruby, :coffee, :jbuilder]}. Searched in: 
    * "/Users/ola/.rvm/gems/ruby-2.2.0/gems/web-console-2.0.0/lib/action_dispatch/templates" 
    * "/Users/ola/Documents/RailsApps/newwp/app/views" 
    * "/Users/ola/.rvm/gems/ruby-2.2.0/gems/videojs_rails-4.6.1/app/views" 
): 
    app/controllers/onepager_controller.rb:22:in `submitEmailAddress' 


    Rendered /Users/ola/.rvm/gems/ruby-2.2.0/gems/web-console-2.0.0/lib/action_dispatch/templates/rescues/missing_template.text.erb (0.3ms) 

當我嘗試提交電子郵件這種形式:

(內index.html.erb

<div class="row"> 
    <div class="col-md-6 col-md-offset-3 col-sm-6 col-sm-offset-3 col-xs-8 col-xs-offset-2"> 
     <%= bootstrap_form_tag url: '/submitEmailAddress', remote: true, html: {class: 'emailForm'} do |f| %> 
     <%= f.email_field :email, hide_label: true %> 
     <%= f.submit "OK, LET'S GO!"%> 
     <% end %> 
    </div> 
</div> 

這裏是我的方法:

(在onepager_controller.rb

def submitEmailAddress 
    puts "inside submitEmailAddress" 

    respond_to do |format| 
     format.html {redirect_to root_path} 
     format.js 
    end 
end 

這是我的路線:

(從我的routes.rb

root 'onepager#index' 
post 'submitEmailAddress', to: 'onepager#submitEmailAddress' 

的我怎麼能解決這個錯誤,任何想法?

+0

待辦事項存在onepager/submitEmailAddress模板? – 2015-03-13 14:53:58

回答

2

您需要在app/views/onepager/submitEmailAddress.js.erb上創建視圖模板。

由於您的控制器擁有HTML格式的重定向,因此您不需要app/views/onepager/submitEmailAddress.html.erb,但是如果您曾經刪除該重定向,或者想要支持沒有JavaScript的瀏覽器,則還需要HTML模板。

+0

我剛剛從'respond_to'中刪除'format.js',現在它工作。這是一個問題(我在'respond_to'裏面沒有'format.js',爲什麼它應該在那裏?在response_to中只有'format.html {redirect_to root_path}'會是一個問題'?)。 – allegutta 2015-03-13 16:24:01

+0

如果您腳手架控制器,它將在那裏,因爲腳手架在默認情況下假定您有HTML視圖和JS視圖(對於API)。如果你不打算爲這條路線提供AJAX響應或API,那麼刪除它就沒有問題。至於'format.html',只要你在後面的塊中執行'redirect_to',你也不需要這個路由的HTML頁面。 – CDub 2015-03-13 16:26:40

+0

謝謝!我現在明白了:) – allegutta 2015-03-13 16:30:56

2

您的控制器操作有format.js作爲響應,該響應應呈現app/views/onepager/submitEmailAddress.js.erb。該模板不存在。您應該創建它或有不同的響應。

最簡單的迴應是format.js { render nothing: true },但您需要決定什麼是合適的。

+0

感謝您的回答!這也起作用:) – allegutta 2015-03-13 16:32:10

0

在你的表單中刪除remote: true或創建app/views/onepager/submitEmailAddress.js.erb

相關問題