2016-06-30 2 views
0

オブジェクトを参照しようとしたときに「間違った引数の数部分的に渡された。Rails 4.2オブジェクトを部分的に渡すときに、引数の数が正しくありません(0の場合1..2)。

ここでは、show.html.erb部分を呼び出す部分です。私は説明するのを助けるためにここに2行の番号を付けました。 1行目は正常に動作し、生成されたリンクが機能します。 2行目は失敗します。ここでは

<% if @bucket.tree_id %> 
    <%= link_to Tree.find(@bucket.tree_id).name, Tree.find(@bucket.tree_id) %> [1] 
    <%= render "shared/bucket_as_table", object: Tree.find(@bucket.tree_id), as: :t %> [2] 
<% end %> 

は、部分的に障害が発生した共有/ _bucket_as_table.html.erbの行です:

<h1><%= t.name%></h1> 

答えて

0

あなたがローカルとしてフォームオブジェクトを渡して試すことができます:

<%= render "shared/bucket_as_table", locals: {t: Tree.find(@bucket.tree_id)} %> 

およびshared/_bucket_as_table.html.erb

<h1><%= t.name%></h1>

更新:あなたは私はこの問題は、あなたのオブジェクト "ツリー" である疑いがあるpartial

+0

はい申し訳ありません私はその代替構文を試しました。私はそれを簡潔に保つために元の質問に言及しなかった。 Railsのドキュメントは同じです:http://api.rubyonrails.org/classes/ActionView/PartialRenderer.html – MSC

+0

@MSC私はちょうど私の答えを更新しました。あなたはもう一度それをチェックすることができます。 –

+0

はい、違いはありません。 – MSC

0

でドキュメントを参照することができ:t

<% @tree = Tree.find(@bucket.tree_id) %> 
<%= render "shared/bucket_as_table", object: @tree, as: 't' %> 

't'としてあなたは置き換えることができ

。このメソッドでクラスを拡張または作成する場合、 "name"という名前のメソッドがあるかどうかを確認します。

+0

私はt.nameを他のページで問題なく使用しました。部分的に読み替えて

<%= t %>

に変更しても問題は解決しません。しかし、私はツリーモデルとコントローラをチェックして何も心配していませんでした。 – MSC

1

Ah!そこで私は再び文書をチェックした(http://api.rubyonrails.org/classes/ActionView/PartialRenderer.html)。どうやら私は、コールの一部として重要な「部分」が必要:

<%= render partial: "shared/bucket_as_table", object: Tree.find(@bucket.tree_id), as: :t %> 

代わりの

<%= render "shared/bucket_as_table", object: Tree.find(@bucket.tree_id), as: :t %> 

それは常に公式ドキュメントに含まれている間、私はマイケル・ハートルの本でこれが表示されません(https://www.railstutorial.org/book/_single-page#code-signup_errors_updated)またはThe Rails 4 Wayhttps://www.amazon.com/Rails-Way-Addison-Wesley-Professional-Ruby/dp/0321944275、p。327)で正しく説明されています。だから誰かが私にそれを説明できるなら、私は感謝するだろう。

関連する問題