2014-10-29 88 views
2

我正在使用Rails 4.我现在用的是Mailgun宝石允许用户通过电子邮件发送书签,应用社交书签项目,保存为书签记录。我的方法在本地控制台工作,但通过发送电子邮件至Heroku的测试时,我收到此:::的ActionView时MissingTemplate - 轨道4

2014-10-29T15:11:10.881903+00:00 app[web.1]: Completed 500 Internal Server Error in 1086ms 
2014-10-29T15:11:10.881913+00:00 app[web.1]: Completed 500 Internal Server Error in 1086ms 
2014-10-29T15:11:10.884245+00:00 app[web.1]: 
2014-10-29T15:11:10.884248+00:00 app[web.1]: ActionView::MissingTemplate (Missing template bookmarks/create_by_mail, application/create_by_mail with {:locale=>[:en], :formats=>[:html], :handlers=>[:erb, :builder, :raw, :ruby, :jbuilder, :coffee]}. Searched in: 
2014-10-29T15:11:10.884249+00:00 app[web.1]: * "/app/app/views" 
2014-10-29T15:11:10.884251+00:00 app[web.1]: * "/app/vendor/bundle/ruby/2.0.0/gems/devise-3.4.0/app/views" 
2014-10-29T15:11:10.884252+00:00 app[web.1]:): 

为什么会寻找一个看法?这一行动应该在幕后完全处理。

相关代码:

skip_before_filter :verify_authenticity_token, only: [:create_by_mail] 


    def create_by_mail 
    @sender = params["sender"] 
    @subject = params["subject"] 
    @body = params["body-plain"] 

    @bookmark = Bookmark.new(title: get_title_from_link(@subject), link: @subject, description: @body, category_ids: category_matcher(@body)) 
    @bookmark.save! 
    end 

私有方法:

private 

    require 'net/http' 
    require 'nokogiri' 
    require 'open-uri' 

    def get_base(url) 
    uri = URI(url) 
    response = Net::HTTP.get_response(uri) 
    base = response["location"] 
    if base 
     base 
    else 
     url 
    end 
    end 

    def get_title_from_link(url) 
    base_url = get_base(url) 
    doc = Nokogiri::HTML(open(base_url).read) 
    doc.at_css("title").text 
    end 

    def parse_categories(text) 
    r = /#.[^\s]+/ 
    text.scan(r) 
    end 

    def category_matcher(text) 
    category_array = [] 
    parse_categories(text).each do |cat| 
     category_array << Category.find_or_create_by(name: cat).id 
    end 
    category_array 
    end 

    def categories_to_array(categories) 
    category_array = [] 
    categories.each do |key, value| 
     if value == '"id"=>"1"' 
     category_array << key 
     end 
    end 
    category_array 
    end 

回答

2

create_by_mail看上去就像是BookmarksController的操作方法。默认情况下,控制器操作方法将尝试使用与操作方法相同的模板名称呈现HTML视图。 BookmarksController#create_by_mail操作方法试图呈现app/views/bookmarks/create_by_mail.html.erb

要覆盖此默认呈现行为,操作方法需要包含对renderredirect的调用,并使用所需行为所需的参数。

相关问题