我在调用部分方法时遇到问题。该方法在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
迷茫......头纺:( – rubyprince
告诉我这件事。我会尽力解释好... – snowangel
可以粘贴与他们的主要行动及其相应的视图控制器的一些更多的代码,因此它使一些更有意义吗? – rubyprince