如何将对象传递给部分?

问题描述:

这不是你如何传递一个对象的部分:如何将对象传递给部分?

<% @answers.each do |answer| %> 
    ... 
    <%= render 'form_for_answer_comment', :answer => answer %> ? 
<% end %> 

我的部分看起来像:

<%= form_for([@question, @answer, @comment]) do |f| %> 

我得到以下错误:

路由错误

No route matches {:action=>"create", :controller=>"questions/answers/comments", :format=>nil, :question_id=>#<Question id: 3, user_id: 1, title: "test", description: "asdfasdfasdfasdfasdfasdf\r\n\r\n\tasdfasd", created_at: "2011-09-10 01:33:38", updated_at: "2011-09-10 01:33:38">, :answer_id=>#<Answer id: nil, user_id: nil, question_id: nil, description: nil, selected: nil, created_at: nil, updated_at: nil>} 

但是,它适用于:

<%= form_for([@question, Answer.first, @comment]) do |f| %> 

我怀疑问题是它没有正确传递@answer对象。我究竟做错了什么?

+0

始终传递给谐音只有局部变量,而不是实例变量,就像你有。 –

尝试:

<%= render :partial => 'form_for_answer_comment', :locals => { :answer => answer } %> 

然后,在你的部分,称之为无@,e.g:

<%= form_for([@question, answer, @comment]) do |f| %> 
+0

我得到未定义的局部变量或方法'答案' –

+1

当你使用渲染partial:'form_for_anser_comment',locals:{answer:answer)时,局部人可能只会被传递。关键位是在渲染 –

+2

@ rm-rf之后呈现的部分词是正确的,我错过了':partial => ..'关键字,我的坏 - 修正了。另外,请注意他的评论有Ruby 1.9.x语法(如果这就是你使用的1.8.7版本,将不起作用)。 – sa125