从查询调用中调用部分对象

时间:2013-03-02 09:31:21

标签: ruby-on-rails partial-views

我有一个问题要让我的部分工作。

我想通过局部变量将对象传递给局部变量,但我得到了

undefined method `model_name' for NilClass:Class 

总是出错。但是变量被传递,因为我可以使用.to_yaml在部分中调用它,这给了我所有的变量属性。

但是当我尝试在form_for中使用它时,我得到了那个错误。

也许它与我的数据库查询有关。因为当我尝试用另一个局部变量调用它时没有错误。但我的查询应该产生一个对象,或者我错了吗?

这是我的show.html.erb:

<%= @partneroffer = Partneroffer.where(:partner_id => @partner.id, :yearname_id => year.id).first  %>
<%= render :partial => "form2", :locals => { :partneroffer => @partneroffer } %>

这是我的部分(_form2.html.erb):

<%= form_for partneroffer , :html => { :class => 'form-horizontal' } do |f| %>
  <%= f.label :partnerstatus_id, :class => 'control-label' %>
  <%= f.collection_select(:partnerstatus_id, Partnerstatus.all, :id, :name) %>
  <%= f.submit nil, :class => 'btn btn-primary' %>
  <%= link_to t('.cancel', :default => t("helpers.links.cancel")),
 partner_year_terms_path, :class => 'btn' %>
<% end %>

2 个答案:

答案 0 :(得分:2)

可能在您的部分中, partneroffer 是一个nil对象,因此它没有“model_name”方法。

您正在以正确的方式呈现视图,并且您正在以正确的方式传递本地人,但是,您确定Partneroffer.where(:partner_id =&gt; @ partner.id,:yearname_id =&gt; year.id )。首先没有得到零价值?在show.html.erb中尝试此代码:

<%- @partneroffer = Partneroffer.where(:partner_id => @partner.id, :yearname_id => year.id).first  %>
<%- if @partneroffer %>
  <%= render :partial => "form2", :locals => { :partneroffer => @partneroffer } %>
<%- else %>
   @partneroffer is nil!!!!
<%- end %>

答案 1 :(得分:0)

我找到了基于其中一个相关主题(Render :partial a random object from DB by id, in custom form)的解决方案!问题是我必须打四次部分。但在一个案例中,我的查询结果中有一条记录。每次没有记录栏时都会抛出此错误消息。我知道其中一个部分调用至少有一个结果,但是并不知道每个结果中都必须有一个结果。感谢weexpectedthis