我正在使用Rails 4进行社交书签项目。我使用Mailgun gem允许用户通过电子邮件将书签发送到应用程序,以保存为书签记录。我的方法在本地控制台中工作,但在通过向Heroku发送电子邮件进行测试时,我会收到:
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
答案 0 :(得分:2)
create_by_mail
看起来像是BookmarksController中的一个动作方法。默认情况下,控制器操作方法将尝试使用与操作方法相同的模板名称呈现HTML视图。 BookmarksController#create_by_mail
操作方法尝试呈现app/views/bookmarks/create_by_mail.html.erb
。
要覆盖此默认呈现行为,操作方法需要包含对render
或redirect
的调用以及所需行为所需的参数。