在rails中创建额外对象

时间:2013-08-04 01:15:41

标签: ruby-on-rails

编辑:这是在发展中发生,而不是在生产中。这是一个问题的原因是因为当我为我的表添加school.tuition + school.room_and_board时,它说'+'是一个无效的运算符和一个名为nil的对象。同样,这只发生在开发中,而不是生产中。不过,这是一个问题,因为我希望能够继续在开发环境中工作。

请参阅http://www.collegeanswerz.com/colleges,然后转到尺寸。你会看到在国立大学下,还有一个额外的学院对象被创建。我无法弄清楚为什么。

(注意:你没有按字母或排名看到这个,因为该代码是手动html,而不是rails迭代)

我今天刚刚增加了100所学校。以前,没有创建额外的对象。现在有了。

seeds.rb

@college = College.find_or_create_by_name!('University of Pittsburgh')
if @college.update_attributes(
    url: 'university-of-pittsburgh',
    public: 'Public',
    years: '4-year',
    category: 'National University',
    calendar: 'Semester',
    location: 'Pittsburgh, PA',
    setting: 'Large City (250-500k)',
    degrees: 'Certificate, Bachelors, Masters, Doctoral',
    rotc: 'Air Force, Army, Navy',
    very_important: 'Academic GPA|Rigor of secondary school record|Standardized Test Scores',
    considered: 'Application Essay|Character/Personal Qualities|Class Rank|Extracurricular Activities|First Generation College Student|Geographical Residence|Level of Applicant\'s Interest|Racial/Ethnic Status|Recommendations|State Residency|Talent/Ability|Volunteer Work|Work Experience',
    student_faculty: '14 to 1',
    retention: '90',
    graduation4: '57',
    graduation6: '79',
    sat_submit: '89',
    act_submit: '41',
    sat_math_25: '600',
    sat_math_75: '690',
    sat_reading_25: '570',
    sat_reading_75: '690',
    sat_writing_25: '560',
    sat_writing_75: '660',
    sat_composite_25: '1130',
    sat_composite_75: '1320',
    act_math_25: '25',
    act_math_75: '30',
    act_english_25: '25',
    act_english_75: '31',
    act_writing_25: '7',
    act_writing_75: '9',
    act_composite_25: '25',
    act_composite_75: '30',
    acceptance_rate: '58',
    enrolled: '32',
    gpa375: '71',
    gpa35: '15',
    gpa325: '8',
    gpa3: '4',
    gpa25: '2',
    high_school_tenth: '54',
    high_school_quarter: '86',
    high_school_half: '99',
    sat_math_700: '25',
    sat_math_600: '53',
    sat_math_500: '21',
    sat_math_400: '1',
    sat_math_300: '0',
    sat_reading_700: '24',
    sat_reading_600: '42',
    sat_reading_500: '32',
    sat_reading_400: '2',
    sat_reading_300: '0',
    sat_writing_700: '14',
    sat_writing_600: '45',
    sat_writing_500: '37',
    sat_writing_400: '4',
    sat_writing_300: '0',
    act_composite_30: '33',
    act_composite_24: '58',
    act_composite_18: '8',
    act_composite_12: '1',
    act_math_30: '40',
    act_math_24: '46',
    act_math_18: '13',
    act_math_12: '1',
    act_english_30: '0',
    act_english_24: '0',
    act_english_18: '0',
    act_english_12: '0',
    class_20: '42',
    class_49: '39.6',
    class_50: '18.4',
    majors: 'business/marketing: 15%|social sciences: 14%|health professions: 11%|english: 10%|engineering: 9%|psychology: 8%|biology: 7%|history: 5%',
    law: '3',
    business: '1',
    medical: '4',
    other_grad: '28',
    us_news_ranking: '58',
    top_25_grad: 'Physical Therapy (3)|Speech-Language Pathology (8)|Library and Information Studies (10)|Social Work (11)|Medicine (15)|Education (24)',
    requirements: 'http://www.asundergrad.pitt.edu/requirements/gened.html',
    majors_offered_link: 'http://www.pitt.edu/academics/undergraduate',
    ap_credit: 'http://www.oafa.pitt.edu/pdf/CreditAPIBExam.pdf',
    enrollment: '18427',
    graduate_enrollment: '10339',
    in_state: '68',
    out_of_state: '32',
    male: '49',
    female: '51',
    ethnicity: 'white: 77%|hispanic/latino: 2%|asian: 8%|black: 5%|2 or more races: 3%|non-resident aliens: 3%|other: 2%',
    frats: '12',
    sororities: '10',
    on_campus: '45',
    freshman_on_campus: '97',
    in_state_tuition: '16590',
    out_of_state_tuition: '26280',
    room_and_board: '9870',
    with_need_got_aid: '68',
    got_need_fully_met: '7',
    percent_need_met: '59',
    scholarships: '41',
    loans: '59',
    cost_30: '17326',
    cost_48: '19950',
    cost_75: '23636',
    cost_110: '26410',
    cost_111: '26985',
    scholarships_link: 'http://www.oafa.pitt.edu/universityschlrs.aspx',
    map: '<iframe width="900" height="1150" scrolling="no" src="http://www.tour.pitt.edu/campus-map"></iframe>',
    street_view: '<iframe width="900" height="550" frameborder="0" scrolling="no" marginheight="0" marginwidth="0" src="https://maps.google.com/maps?f=q&amp;source=embed&amp;hl=en&amp;geocode=&amp;q=University+of+Pittsburgh,+4200+Fifth+Ave,+Pittsburgh,+PA&amp;aq=0&amp;oq=uni&amp;sll=40.444261,-79.970448&amp;sspn=0.142165,0.251656&amp;ie=UTF8&amp;hq=University+of+Pittsburgh,+4200+Fifth+Ave,+Pittsburgh,+PA&amp;ll=40.443486,-79.958245&amp;spn=0.010798,0.021038&amp;t=m&amp;layer=c&amp;cbll=40.441775,-79.956671&amp;panoid=BgWQKMiSI1fpwP7JUF16Vg&amp;cbp=12,45.25,,0,-3.34&amp;output=svembed"></iframe><br /><small><a href="https://maps.google.com/maps?f=q&amp;source=embed&amp;hl=en&amp;geocode=&amp;q=University+of+Pittsburgh,+4200+Fifth+Ave,+Pittsburgh,+PA&amp;aq=0&amp;oq=uni&amp;sll=40.431368,-79.9805&amp;sspn=0.142165,0.251656&amp;ie=UTF8&amp;hq=University+of+Pittsburgh,+4200+Fifth+Ave,+Pittsburgh,+PA&amp;ll=40.443486,-79.958245&amp;spn=0.010798,0.021038&amp;t=m&amp;layer=c&amp;cbll=40.441775,-79.956671&amp;panoid=BgWQKMiSI1fpwP7JUF16Vg&amp;cbp=12,45.25,,0,-3.34" style="color:#0000FF;text-align:left">View Larger Map</a></small>',
    housing: '<iframe src="http://www.tour.pitt.edu/tour-categories/residence-halls" scrolling="no" height="820" width="900"></iframe>',
    food: '<div style="overflow: hidden; max-width: 1000px;"><iframe scrolling="no" src="http://www.pc.pitt.edu/dining/menus.php" style="margin-left: 0; height: 2000px; margin-top: -370px; margin-bottom: -375px; width: 750px;"></iframe></div>',
    weather: '<div style="overflow: hidden; max-width: 500px;"><iframe scrolling="no" src="http://www.weather.com/weather/wxclimatology/monthly/graph/USPA1290" style="margin-left: -40px; height: 1570px; margin-top: -490px; width: 500px;"></iframe></div>',
    dorms: 'Towers (fr.)|Sutherland (fr.)|Lothrop (fr.)|Nordenberg (fr.)|Holland (fr.)|Forbes (fr.; honors)|McCormick|Brackenridge|Amos|Bruce|Panther|Pennsylvania|Ruskin|Bouquet Gardens|Oakwood Apartments|Centre-Plaza Apartments|Forbes-Craig Apartments (honors)',
    dorm_urls: 'towers|sutherland|lothrop|nordenberg|holland|forbes|mccormick|brackenridge|amos|bruce|panther|pennsylvania|ruskin|bouquet-gardens|oakwood-apartments|centre-plaza-apartments|forbes-craig-apartments',
    science_majors: 'Actuarial Science|Agriculture|Applied Math|Astronomy|Biology|Chemistry|Computer Science|Earth Science|Geology|Linguistics|Mathematics|Neuroscience|Physics|Statistics',
    social_science_majors: 'Anthropology|Criminology|Economics|History|Political Science|Psychology|Sociology|Urban Studies|Women\'s Studies',
    humanities_majors: 'Art|Classics|English|Film|History and Philosophy of Science|Literature|Music|Philosophy|Religious Studies|Theatre',
    business_majors: 'Accounting|Finance|Management|Marketing',
    engineering_majors: 'Bioengineering|Chemical|Civil|Computer|Electrical|Engineering Science|Industrial|Materials Science and Engineering|Mechanical|Nuclear',
    professional_majors: 'Architecture|Athletic Training|Communications/ Journalism|Information Science|Nursing|Nutrition|Pharmacy|Public Health|Rehab Science|Social Work',
    area_studies_majors: 'African|Chinese|French|German|Italian|Japanese|Jewish|Latin American|Middle Eastern|Russian|Spanish|Other')
else
  # handle validation errors
end

我的种子档案基本上适用于300所学校。我经历了很多次,我没有看到任何应该创建空物体的东西。我使用cmd + f来查找@college = College.find_or_create_by_name!('')的变体,但没有任何内容。我手动浏览了@college = College.find_or_create_by_name!(的所有cmd + f,他们都在创建一个有名字的实际大学(空对象没有名字)。

以下是一些相关的代码摘录。如果您想了解更多信息,请与我们联系。

关于问题是什么的任何想法?

static_pages_controller.rb

def colleges
    @national_university = College.where("category = 'National University'").order("enrollment DESC")
    @liberal_arts_college = College.where("category = 'Liberal Arts College' OR category = 'Military College'").order("enrollment DESC")
  end

colleges.html.erb

<div class="tab-pane" id="size">
        <h3>National Universities</h3>
        <nav class="list">
            <ol>
                <% @national_university.each do |school| %>
                    <li><%= link_to "#{school.name} (#{(number_with_delimiter(school.enrollment, :delimiter => ',') )})", "/#{school.url}" %></li>
                <% end %>
            </ol>
        </nav>

        <h3>Liberal Arts Colleges</h3>
        <nav class="list">
            <ol>
                <% @liberal_arts_college.each do |school| %>
                    <li><%= link_to "#{school.name} (#{(number_with_delimiter(school.enrollment, :delimiter => ',') )})", "/#{school.url}" %></li>
                <% end %>
            </ol>
        </nav>
    </div>
    <div class="tab-pane" id="table">
        <div class="tabbable">
            <ul class="nav nav-pills">
                <li class="active"><a href="#national_universities" data-toggle="tab">National Universities</a></li>
                <li><a href="#liberal_arts_colleges" data-toggle="tab">Liberal Arts Colleges</a></li>
            </ul>
        </div>
        <div class="tab-content">
            <div id="national_universities" class="tab-pane active">
                <table id="national_universities_table" class="table table-striped table-bordered table-hover">
                    <thead>
                        <tr>
                            <th>Name</th>
                            <th>Rank</th>
                            <th>Location</th>
                            <th>Setting</th>
                            <th>Size</th>
                            <th>Cost*</th>
                            <th>Math SAT</th>
                            <th>Reading SAT</th>
                            <th>ACT Composite</th>
                        </tr>
                    </thead>
                    <tbody>
                        <% @national_university.each do |school| %>
                            <tr>
                                <td class="name_column"><%= link_to "#{school.name}", "#{school.url}" %></td>
                                <td class="rank_column"><%= "#{school.us_news_ranking}" %></td>
                                <td class="location_column"><%= "#{school.location}" %></td>
                                <td class="setting_column"><%= "#{school.setting}" %></td>
                                <td class="size_column"><%= number_with_delimiter("#{school.enrollment}", :delimiter => ',') %></td>
                                <td class="cost_column">$<%= number_with_delimiter("#{school.in_state_tuition}", :delimiter => ',') %>
                                / $<%= number_with_delimiter("#{school.out_of_state_tuition}", :delimiter => ',') %></td>
                                <td class="math_column"><%= "#{school.sat_math_25} - #{school.sat_math_75}" %></td>
                                <td><%= "#{school.sat_reading_25} - #{school.sat_reading_75}" %></td>
                                <td><%= "#{school.act_composite_25} - #{school.act_composite_75}" %></td>
                            </tr>
                        <% end %>
                    </tbody>
                </table>
            </div> <!-- pane 1 -->

            <div id="liberal_arts_colleges" class="tab-pane">
                <table id="liberal_arts_colleges_table" class="table table-striped table-bordered table-hover">
                    <thead>
                        <tr>
                            <th>Name</th>
                            <th>Rank</th>
                            <th>Location</th>
                            <th>Setting</th>
                            <th>Size</th>
                            <th>Cost*</th>
                            <th>Math SAT</th>
                            <th>Reading SAT</th>
                            <th>ACT Composite</th>
                        </tr>
                    </thead>
                    <tbody>
                        <% @liberal_arts_college.each do |school| %>
                            <tr>
                                <td class="name_column"><%= link_to "#{school.name}", "#{school.url}" %></td>
                                <td class="rank_column"><%= "#{school.us_news_ranking}" %></td>
                                <td class="location_column"><%= "#{school.location}" %></td>
                                <td class="setting_column"><%= "#{school.setting}" %></td>
                                <td class="size_column"><%= number_with_delimiter("#{school.enrollment}", :delimiter => ',') %></td>
                                <td class="cost_column">$<%= number_with_delimiter("#{school.in_state_tuition + school.room_and_board}", :delimiter => ',') %>
                                / $<%= number_with_delimiter("#{school.out_of_state_tuition + school.room_and_board}", :delimiter => ',') %></td>
                                <td class="math_column"><%= "#{school.sat_math_25} - #{school.sat_math_75}" %></td>
                                <td><%= "#{school.sat_reading_25} - #{school.sat_reading_75}" %></td>
                                <td><%= "#{school.act_composite_25} - #{school.act_composite_75}" %></td>
                            </tr>
                        <% end %>
                    </tbody>
                </table>
            </div> <!-- pane 2-->

            <p>Tip: Sort multiple columns simultaneously by holding down the shift key and clicking a second, third or even fourth column header!</p>
            <p>*cost = tuition + room & board; in state / out of state</p>
        </div>  <!-- tab-content -->
    </div> <!-- tab-pane -->  
尝试删除空对象时

控制台输出

:002 > College.where("name=''")
  College Load (5.6ms)  SELECT "colleges".* FROM "colleges" WHERE (name='')
 => [#<College id: 201, public: "Public", years: "4-year", category: "National University", calendar: "", location: "", setting: "", retention: nil, created_at: "2013-08-02 20:26:53", updated_at: "2013-08-02 20:26:53", graduation4: nil, graduation6: nil, degrees: "", rotc: "", sat_submit: nil, act_submit: nil, sat_math_25: nil, sat_math_75: nil, sat_reading_25: nil, sat_reading_75: nil, sat_writing_25: nil, sat_writing_75: nil, sat_composite_25: nil, sat_composite_75: nil, act_math_25: nil, act_math_75: nil, act_writing_75: nil, act_composite_25: nil, act_composite_75: nil, acceptance_rate: nil, enrolled: nil, gpa375: nil, gpa35: nil, gpa325: nil, gpa3: nil, gpa25: nil, high_school_tenth: nil, high_school_quarter: nil, high_school_half: nil, sat_math_700: nil, sat_math_600: nil, sat_math_500: nil, sat_math_400: nil, sat_math_300: nil, sat_reading_700: nil, sat_reading_600: nil, sat_reading_500: nil, sat_reading_400: nil, sat_reading_300: nil, sat_writing_700: nil, sat_writing_600: nil, sat_writing_500: nil, sat_writing_400: nil, sat_writing_300: nil, act_composite_30: nil, act_composite_24: nil, act_composite_18: nil, act_composite_12: nil, act_math_30: nil, act_math_24: nil, act_math_18: nil, act_math_12: nil, very_important: "", important: nil, considered: "", student_faculty: "", class_20: nil, class_49: nil, class_50: nil, majors: "", law: nil, business: nil, medical: nil, other_grad: nil, us_news_ranking: nil, top_25_grad: "", enrollment: nil, graduate_enrollment: nil, in_state: nil, out_of_state: nil, male: nil, female: nil, ethnicity: "", frats: nil, sororities: nil, on_campus: nil, freshman_on_campus: nil, in_state_tuition: nil, out_of_state_tuition: nil, room_and_board: nil, with_need_got_aid: nil, got_need_fully_met: nil, percent_need_met: nil, scholarships: nil, loans: nil, name: "", url: "", act_writing_25: nil, cost_30: nil, cost_48: nil, cost_75: nil, cost_110: nil, cost_111: nil, requirements: "", majors_offered: nil, ap_credit: "", scholarships_link: "", map: "", street_view: "", housing: "", food: "", weather: "", dorms: "", majors_offered_link: "", science_majors: "Actuarial Science|Agriculture|Applied Math|Astronom...", social_science_majors: "Anthropology|Criminology|Economics|History|Politica...", humanities_majors: "Art|Classics|English|Film|History and Philosophy of...", business_majors: "Accounting|Finance|Management|Marketing", engineering_majors: "Bioengineering|Chemical|Civil|Computer|Electrical|E...", professional_majors: "Architecture|Athletic Training|Communications/ Jour...", dorm_urls: "", act_english_25: nil, act_english_75: nil, act_english_30: nil, act_english_24: nil, act_english_18: nil, act_english_12: nil, area_studies_majors: "African|Chinese|French|German|Italian|Japanese|Jewi...">] 
1.9.3p429 :003 > College.where("name=''").destroy
ArgumentError: wrong number of arguments (0 for 1)
    from /Users/adamzerner/.rvm/gems/ruby-1.9.3-p429/gems/activerecord-3.2.13/lib/active_record/relation.rb:378:in `destroy'
    from (irb):3
    from /Users/adamzerner/.rvm/gems/ruby-1.9.3-p429/gems/railties-3.2.13/lib/rails/commands/console.rb:47:in `start'
    from /Users/adamzerner/.rvm/gems/ruby-1.9.3-p429/gems/railties-3.2.13/lib/rails/commands/console.rb:8:in `start'
    from /Users/adamzerner/.rvm/gems/ruby-1.9.3-p429/gems/railties-3.2.13/lib/rails/commands.rb:41:in `<top (required)>'
    from script/rails:6:in `require'
    from script/rails:6:in `<main>'
1.9.3p429 :004 > College.where("name=''").delete
ArgumentError: wrong number of arguments (0 for 1)
    from /Users/adamzerner/.rvm/gems/ruby-1.9.3-p429/gems/activerecord-3.2.13/lib/active_record/relation.rb:440:in `delete'
    from (irb):4
    from /Users/adamzerner/.rvm/gems/ruby-1.9.3-p429/gems/railties-3.2.13/lib/rails/commands/console.rb:47:in `start'
    from /Users/adamzerner/.rvm/gems/ruby-1.9.3-p429/gems/railties-3.2.13/lib/rails/commands/console.rb:8:in `start'
    from /Users/adamzerner/.rvm/gems/ruby-1.9.3-p429/gems/railties-3.2.13/lib/rails/commands.rb:41:in `<top (required)>'
    from script/rails:6:in `require'
    from script/rails:6:in `<main>'
1.9.3p429 :005 > 

1 个答案:

答案 0 :(得分:1)

我对上述评论的建议是在rails控制台中查找以空字符串作为名称的对象。它可以帮助您确定对象的插入位置/时间/方式。

一旦你明白了,你可以通过以下方式摆脱所有“无名”对象:

College.where("name=''").each { |a| a.destroy }

-Nick