У меня проблемы с вызовом метода в частичном. Метод определен в модели Isbn. Вот установка:
Контракты
has_many :isbns, :through => :istcs
ISBNs
belong_to :contracts
Представление Isbn show успешно отображает результат roy_first
, переменной экземпляра, определенной в методе:
<% @isbn.roy_first.each do |hash| %>
<% hash.each do |channel, roy| %>
<%= "#{channel} 1st: £#{roy}" %>
<% end %><% end %>
Как я уже сказал, roy_first
- это переменная экземпляра, определенная в Isbn.rb:
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
Метод показа контроллера isbns:
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 %>
ISBN Показать представление:
<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