2011-06-28 113 views
0

我在调用部分方法时遇到问题。该方法在Isbn模型中定义。这里的设置:调用另一个模型调用的部分模型方法

合同

has_many :isbns, :through => :istcs 

的ISBN

belong_to :contracts 

书号放映视图成功地显示的roy_first,这是在该方法中所定义的一个实例变量的结果:

<% @isbn.roy_first.each do |hash| %> 
<% hash.each do |channel, roy| %> 
<%= "#{channel} 1st: £#{roy}" %> 
<% end %><% end %> 

正如我所说,roy_first是一个实例变量在Isbn.rb BLE定义:

def sales_lookup_complete 
# a bunch of code... 
@roy_first << {channel_name => ra = df*(u/100)} 
end 

这里的isbns_controller显示,如果是相关的:

@isbn.sales_lookup_complete 

但是,当我尝试调用同一个实例变量的_isbn部分,我得到一个未定义的方法错误。我使用本地或实例变量时出现此错误。

我的问题:如何在从合约> show.html.erb访问的部分中调用相同的函数?

的部分被称为从合同显示页是这样的:

<%= render @isbns %> 

提前非常感谢。

下面是一些作为请求更多的代码:

的合同控制器显示方法:

def show 
    @title = (@contract.contract_name + "'s contract") 
    @istcs = @contract.istcs.paginate(:page => params[:page]) 
    @isbns = @contract.isbns.paginate(:page => params[:page])  
    end 

的ISBN控制器显示方法:

def show 
    @isbn = Isbn.find(params[:id]) 
    @title = @isbn.descriptivedetail_titledetail_titleelement_titlewithoutprefix 
    @sales = @isbn.sales.paginate(:page => params[:page] || 1) 
    @isbn.sales_lookup_complete 
    end 

合同放映视图:

<h4>ISBNs <span class="add"><%= link_to "Create ISBN", new_isbn_path %></span></h4> 
<% unless @contract.isbns.empty? %> 
<table summary="Contract ISBNs"> 
<%= render @isbns %>   
    </table> 
<% end %> 

书号放映视图:

<table> 
    <tr><h5>Royalties for all sales</h5> 
     <tr><% @isbn.roy_first.each do |hash| %> 
      <td><% hash.each do |channel, roy| %> 
       <%= "#{channel} 1st: £#{roy}" %> 
      </td><% end %><% end %> 
     </tr> 
</table> 

这是导致该错误,在部分称为_isbn,并且这是在ISBN视图区域,但是从合同称为位显示视图:

Id: <%= isbn.id%> 
<tr><% @isbn.roy_first.each do |hash| %> 
    <td><% hash.each do |channel, roy| %> 
     <%= "#{channel} 1st: £#{roy}" %> 
    </td><% end %><% end %> 
</tr> 

isbn.id位工作正常。在标签中的代码提供了以下错误:

NoMethodError in Contracts#show 

Showing /app/views/isbns/_isbn.html.erb where line #6 raised: 

undefined method `roy_first' for nil:NilClass 

Extracted source (around line #6): 

3: <span class="content"><%= link_to isbn.descriptivedetail_titledetail_titleelement_titlewithoutprefix, edit_isbn_path(isbn.id) %> </span> 
4:  <span class="timestamp"> 
5:  Id: <%= isbn.id%> 
6:  <tr><% @isbn.roy_first.each do |hash| %> 
7:   <td><% hash.each do |channel, roy| %> 
8:    <%= "#{channel} 1st: £#{roy}" %> 
9:   </td><% end %><% end %> 

使它成为一个局部变量给出:

NoMethodError in Contracts#show 

Showing /app/views/isbns/_isbn.html.erb where line #6 raised: 

You have a nil object when you didn't expect it! 
You might have expected an instance of Array. 
The error occurred while evaluating nil.each 

Extracted source (around line #6): 

3: <span class="content"><%= link_to isbn.descriptivedetail_titledetail_titleelement_titlewithoutprefix, edit_isbn_path(isbn.id) %> </span> 
4:  <span class="timestamp"> 
5:  Id: <%= isbn.id%> 
6:  <tr><% isbn.roy_first.each do |hash| %> 
7:   <td><% hash.each do |channel, roy| %> 
8:    <%= "#{channel} 1st: £#{roy}" %> 
9:   </td><% end %><% end %> 

Trace of template inclusion: app/views/contracts/show.html.erb 
+0

迷茫......头纺:( – rubyprince

+0

告诉我这件事。我会尽力解释好... – snowangel

+0

可以粘贴与他们的主要行动及其相应的视图控制器的一些更多的代码,因此它使一些更有意义吗? – rubyprince

回答

2

我不知道,如果你想这样做,但试试这个:

contracts_controller - 显示

def show 
    @title = (@contract.contract_name + "'s contract") 
    @istcs = @contract.istcs.paginate(:page => params[:page]) 
    @isbns = @contract.isbns.paginate(:page => params[:page])  
end 

合同 - 显示视图

<h4>ISBNs <span class="add"><%= link_to "Create ISBN", new_isbn_path %></span></h4> 
<% unless @isbns.empty? %> 
    <table summary="Contract ISBNs"> 
    <% @isbns.each do |isbn| %> 
     <% isbn.sales_lookup_complete %> 
     <%= render :partial => "isbn", :locals => {:isbn => isbn} %> 
    <% end %>  
    </table> 
<% end %> 

和_isbn.html.erb

<tr> 
    <% isbn.roy_first.each do |hash| %> 
    <td> 
     <% hash.each do |channel, roy| %> 
     <%= "#{channel} 1st: £#{roy}" %> 
     <% end %> 
    </td> 
    <% end %> 
</tr> 
+0

哦,这么近。我搬到了_isbn部分从ISBN收缩,但它返回此错误: NoMethodError在合同#显示 显示应用程序/视图/合同/ _isbn.html.erb在行#7提出: 未定义的方法'roy_first”为零:NilClass 提取的源(围绕线#7): 4:<跨度类= “时间戳”> 5:ID:<%= isbn.id%> 6:\t 7:\t <%@ isbn.roy_first.each待办事项|散列| %> 8:\t​​ 9:\t <%hash.each做|信道,罗伊| %> 10:\t <%=“#{channel} 1st:£#{roy}”%> – snowangel

+0

尝试'isbn.roy_first'而不是'@ isbn.roy_first' – rubyprince

+0

对不起,您确实说过......并且有效!非常感谢你的努力,这意味着世界。精美的工作。 – snowangel

0

_isbn.html.erb部分:

<% isbn.roy_first.each do |hash| %> 
    <% hash.each do |channel, roy| %> 
    <%= "#{channel} 1st: £#{roy}" %> 
    <% end %> 
<% end %> 

这应该肯定的工作。

The error occurred while evaluating nil.each此错误意味着roy_first方法返回nil而不是预期的hash

+0

感谢您的线索 - 我会看看我是否能找出为什么它仍然失败......奇怪,它的作品在常规节目,但不是偏... – snowangel

相关问题