2012-04-09 9 views
1

このコードを使用してリンクを表示すると、3つのデータベースエントリがテーブルにリンクされます。定義されていないメソッドが返されます。これらのフィールド。link_toは未定義メソッドを実行します。nil:NilClassエラー

<td><%= link_to @company.office_adress_street + ", " + @company.office_adress_city + ", " + @company.office_adress_postcode, "http://maps.google.com/?q=" + @company.office_adress_street + ", " + @company.office_adress_city + ", " + @company.office_adress_postcode, :target => '_blank' %></td> 
+1

は、これらのフィールドのいくつかは、いくつかのために存在しないこと、それが意図されて企業は? – FlyingFoX

+0

@FlyingFoXはい、一部の企業は存在しない可能性があります – kipeens

答えて

4

あなたは、@ company.XXXの属性にこれらの呼び出しのそれぞれがnilを返さないことを確認する必要がありますし、いっその文字列の連結は次のように構造化する必要があります。

"#{link_to(@company.office_adress_street)}, #{@company.office_adress_city}, #{@company.office_adress_postcode}" 
+0

私はレールの初心者です。任意のヒントは、どのようにnilを返さないようにチェックを行う方法とあなたの提案された構造が良いですか? – kipeens

+0

#{}はnilsをより良く処理します(nilオブジェクトで+()を呼び出すと例外をスローしません)。 nilを返すかどうかをチェックするには、#{@@company.office_address_city.nilなどのインライン条件を使用できますか? "":@ company.office_address_city.nil}。これは属性の値を返すか、属性の値を返します。 –

1

@companyを持っていることを確認しますoffice_adress_street属性(etc ...)であり、nilではありません(@company.office_adress_streetが文字列であることが期待されています)。

おそらくタイプミスがありますか? adressまたはaddress

@companyは時々何office_adress_street属性を持っていないことが意図されている場合は、link_to_ifヘルパーを使用します。私はあなたのモデルに(またはデコレータに)メソッドを追加することをお勧め

<td><%= link_to_if @company.office_adress_street, @company.office_adress_street + ", " + @company.office_adress_city + ", " + @company.office_adress_postcode, "http://maps.google.com/?q=" + @company.office_adress_street + ", " + @company.office_adress_city + ", " + @company.office_adress_postcode, :target => '_blank' %></td>

+0

これは私の問題を解決していないと思う。なぜなら、上記のいずれの属性も値を入れられないからだ。 – kipeens

+0

はい、申し訳ありません。この場合、ジョンに示唆されているようにモデルにメソッドを追加します。これは、すべてを1つの属性にまとめます。 – DanS

3

def address 
    [office_address_street, office_address_city, office_address_postcode].compact.join(', ') 
end 

あなたの意見では:

<td><%= link_to @company.address, "http://maps.google.com/?q=" + @company.address, :target => '_blank' %></td> 

あなたはデコレータを使用することを決定しない場合、あなたはまた、リンクを返すメソッドlink_to_addressを作成することができ、その後にビューを簡素化:

<td><%= @company.link_to_address %></td> 
+0

ありがとう、素晴らしいヒント。 – kipeens

関連する問題