2014-03-13 1 views
0

В моей заявке есть два класса, которые имеют отношение «has_many». И из этого проекта я могу получить объект с моего контроллера (* _ controler.rb) и успешно передать свой вид (* .html.erb)Невозможно получить доступ к значению объекта коллекции в файле erb - has_many relationship - ruby ​​on rails

Но на части обзора (*. Html.erb) я могу класс коллекции не является объектом доступа ...

я получил следующее исключение:

ActionView::TemplateError (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.inject) on line #31 of app/views/student/_populate.html.erb: 

Классы модели:

class Student < ActiveRecord::Base 

    has_many :Subject, :class_name=>"Subject" 

    attr_accessible :first_name, :middle_name, :last_name, 

    self.table_name="students" 
    set_primary_key :id 

    blahblah 
end 

class Subject < ActiveRecord::Base 

    belongs_to :Student, :foreign_key=>'student_id' 

    attr_accessible :student_id, :name 

    self.table_name="subjects" 

    blahblah 
end 

контроллер:

class StudentController < ApplicationController 

    require "student.rb" 

    def populate 
     @pos=0 

     filter_query = '' 
     if !params[:firstName].blank? 
      filter_query +=" first_name='" + params[:firstName].to_s + "' and" 
     end 

     if filter_query !='' 
      filter_query= filter_query[0..filter_query.length-4] 
      @stuData= Student.find(:all, :conditions=>filter_query) 
     end 

    end 

Вид:

populate.html.erb

<div class="header"> 
    <div class="heading" style="float:left;width:900px;">  
     <% form_tag(:controller=>"student", :action=>"populate") do %> 
      <table> 
       <tr> 
        <td width="10"> <label> First Name:</label> </td> 
        <td width="40"> <%= text_field_tag('firstName') %> </td> 
       </tr> 
      </table> 

      <input name="submitFormName" class="form_submit" type="submit" value="Search" /> 

     <% end %> 

     <div height="10">&nbsp;</div> 

    </div> 
</div> 

<div class="students" style="float:left;width:1330px;"> 

    <% if [email protected]? %> 
     size = <%= @stuData.size %> 
     <% if [email protected]? %> 
      <%= render :partial=>'populate' , :locals=>{:stuData => @stuData} %> 
     <% end %> 
    <% else %> 
     <div>Not found...</div> 
    <% end %> 
</div> 

_populate.html.erb

<div style="overflow-y:auto;overflow-x:scroll;">    
    <table > 
     <thead> 
     <th>Id</th> 
     <th>First Name</th> 
     <th>Middle Name </th> 
     <th>Last Name</th> 
     <th>Subject Name</th> 
     </thead>  
     <% stuData.each do |item| %> 
     <tr> 
     <td id="studentId"> <%= item.id %> </td> 
     <td id="firstNameId"> <%= item.promotion_code %> </td> 
     <td id="middleNameId"> &nbsp; </td> 
     <td id="lastNameId"> &nbsp; </td> 
     <td id="cityId"> 
      <% @var1 = item.Subject %> 
      <% if @var1.nil? %> 
      <% @var1.each do |pc| %> 
       <%= pc.name %> 
      <% end %> 
      <% end %> 
     </td> 
     </tr> 
    <% end %> 
    </table> 
</div> 

Я пересекла чек на консоли:

@student = Student.find(144) 
=> #<Student id: 4, first_name: "ABC", middle_name: "DEF", last_name: "GHI"> 
>> 
?> @isNullCheck = @student.Subject.nil? 
=> false 
>> 
?> @subList = @student.Subject 
=> [#<Subject id: 5, student_id: 4, name: "Maths">, #<Subject id: 6, student_id: 4, name: "English"> ] 
>> 
?> @StuSub1 = @student.Subject[0] 
=> #<Subject id: 5, student_id: 4, name: "Maths"> 
>> 
?> @StuSub2 = @student.Subject[1] 
=> #<Subject id: 6, student_id: 4, name: "English"> 
== 
?> @StuSub3 = @student.Subject[2] 
=> nil 
>> 
>> @StuSubValue1 = @student.Subject[0].value 
=> Maths 
>> 
>> @StuSubValue2 = @student.Subject[0].value 
=> English 
>> 

Проблема: Когда я буду искать какие-либо детали ученика со страницы (populate.html.erb), мой контроллер будет извлекать данные и передавать объект (@stuData) в шаблон (_populate.html.erb).

Шаблон (_populate.html.erb) может печатать данные студента. Но не может печатать имя субъекта студента. (Как студент имеет много предметов)

Я гугл много вещей ....

я думаю, что нет ничего плохого в дизайне и контроллер модели части .... , но я думаю, что проблема может быть с

  • отображения страниц или
  • локальные параметры, проходящие в шаблон или
  • параметр коллекции перехода к шаблону ...

но я не уверен ....

Может ли кто-нибудь помочь мне в этом ???

Спасибо заранее,

+0

чувак ........ . ты замечательный. он исправляет мою проблему ...... –

+0

Я понятия не имею, что рубиновый материал настолько строг в отношении сингулярного множественного числа и чувствительности к регистру ... –

ответ

1

Ваши отношения установлены неправильно. Имена переменных не могут начинаться с заглавной буквы. This article может помочь.

Установить их без использования капиталов и использовать множественные вместо этого - вот так:

has_many :subjects и belongs_to :student

и убедитесь, что вы распространять изменения через ваши взгляды

+0

после перезагрузки сервера ... такая же проблема начинается ... поэтому я думаю это не проблема .... –

+1

вы говорите, что проблема была исправлена, когда вы вносили эти изменения, но затем снова появлялись после перезапуска сервера? – novemberkilo

+0

Да .... точно. И еще одна странная вещь: когда я запускаю свой сервер, в то время для первого запроса, он извлекает коллекцию и работает полностью хорошо ... но со второго запроса ... я получил исключение нулевого указателя ... –

 Смежные вопросы

  • Нет связанных вопросов^_^