2017-03-02 4 views
0

次の私の多くのメーラーのテンプレートのいずれかです。html.erbファイル内の文字列にはnilのない暗黙の型変換しない

<% if @system_email.present? && @system_email.try(:content).present? %> 
    <%= @system_email.content.to_s.gsub(
    "::vUserName::", @wanted_equipment.try(:name)).gsub(
    "::iListingId::", @equipment.identifier).gsub(
    "::vListingTitle::", @equipment.title).gsub(
    "::vCategoryName::", @equipment.try(:category).try(:name)).gsub(
    "::eListingType::", @equipment.listing_type).gsub(
    "::SYSTEM_COMPANY_NAME::", @system_company_name).gsub(
    "::SITE_LISTING_URL::", link_to(@system_site_url, equipment_details_url(@equipment.slug))).html_safe 
    %> 

ApplicationMailer

def newequip_matches_wanted 
    @system_email = SystemEmail.find_by(title: 'Equipment matches WantedEquipment') 
    @subject = @system_email.try(:subject).to_s 
    @subject = "Equipment matches WantedEquipment" if @subject.blank? 
    @equipment = Equipment.last 
end 

このhtml.erbをレンダリングしようとしていますがテンプレートでは次のようなエラーが表示されます:

no implicit conversion of nil into String 
Extracted source (around line #2): 

<% if @system_email.present? && @system_email.try(:content).present? %> 
    <%= @system_email.content.to_s.gsub(.. 

email.contenコメントを考えて表示するだけです。

@system_email = SystemEmail.find_by(title: 'Equipment matches WantedEquipment') 



=> #<SystemEmail id: 28, identifier: "MAIL-0000028", title: "Equipment matches WantedEquipment", subject: "Equipment matches WantedEquipment", content: "<p>Hello <strong>::vUserName::</strong>,</p>\r\n ...", footer: nil, status: 1, created_at: "2017-03-01 07:36:30", updated_at: "2017-03-01 07:40:07"> 

他のメーラーと同じテンプレートが動作します。しかし、それはここでエラーを投げている。誰かが私に何が間違っているか教えてもらえますか?

+1

コンテンツが見つかりません –

+0

その特定のsystem_emailにはコンテンツがあります。より多くのリソースで質問を編集します。 – user3576036

+0

'@ wanted_equipment.try(:name).to_s'これは、gsubの2番目のパラメータごとに行います。 – Omkar

答えて

0

それは、暗黙の変換は、明示的には存在すると言う:識別子、タイトル、取引の種類、@equipment、@system_site_urlまたは@system_company_nameでのスラグ:

2.3.1 :001 > nil.to_s 
=> "" 

だからあなたはこれらのいずれかを持っていません。 本当に@ equipment.titleを使用するか、電子メールのタイトルを使用するかどうかもわかりません。

少し奇妙な方法ですが、試してみることができます。 NilClassのto_sメソッドを再定義し、すべてのフィールドにto_sを追加します。その後、あなたが逃したものが飛び出すでしょう。

class NilClass 
    def to_s; "NILNILNIL"; end 
end 
... 
2.3.1 :010 > nil.to_s 
=> "NILNILNIL" 
+0

私は多くのリソースで質問を編集しました。何が欠けているのか教えてください。識別子、タイトル、およびそのsystem_emailのすべてがあります。 – user3576036

+0

答えを更新しました。私の推測では、 '@ equipment.title'の代わりに' @ system_email.title'を使いたいと思っています。 – akg

+0

@ user3576036問題が見つかりましたか? – akg

関連する問題