使用AJAX刷新部分Rails时的未定义方法

时间:2016-01-29 02:22:49

标签: javascript jquery ruby-on-rails ajax ruby-on-rails-3

我正在努力解决如何使用Rails和AJAX重新加载部分问题,并且遇到Undefined Method错误。我认为这可能是因为我没有正确地将局部变量传回部分变量,但我不确定这应该如何工作。

我有一个" Projects" Show.html.erb页面。在该节目页面上有一个DIV用于"投资"与该项目相关联。

Show.html.erb

  <div class="col-md-3" id="investments-container">
    <%= render 'proj_investments' %>
  </div>
然后,它会在_proj_investments.html.erb部分中呈现部分循环通过与项目关联的所有投资(按奖励类型分组)。每个表单都有一个表单提交,允许以某种方式点击INVEST按钮并使用AJAX创建新的投资。 (&lt;%= form_for [@investment,Investment.new],remote:true,&#34; data-type&#34; =&gt;:js do | f |%&gt;)

_proj_investments.html.erb

<% if @project.rewards.any? %>
          <% @project.rewards.each do |reward| %>
            <div class="panel panel-default project-rightpanel">
              <div class="project-rightpanel-header">
                <span class="project-rightpanel-header amount"><%=number_to_currency(reward.amount,precision: 0)%></span>
                <span class="project-rightpanel-header amount"><%=reward.rewardtype.name %></span>
              </div>
              <div class="project-rightpanel-header">
                  <%=reward.investments.count(:amount)%> investments for <%=number_to_currency(reward.investments.sum(:amount),precision: 0)%>
              </div>
              </div>
              <%= form_for [@investment, Investment.new], remote: true, "data-type" => :js do |f| %>
              <div class="field">
                <%= f.hidden_field :amount, :value => reward.amount %>
                <%= f.hidden_field :User_id, :value => current_user.id %>
                <%= f.hidden_field :Reward_id, :value => reward.id %>
              </div>
              <div class="actions">
                <%= f.submit "INVEST", :class => "btn btn-success" %>
              </div>
            <% end %>

            </div>
          <% end %>
      <% end %>

然后,Investments控制器调用Create方法并响应JS并调用我的create.js.erb

investments_controller.rb

  def create
@investment = Investment.new(investment_params)

respond_to do |format|
  if @investment.save
    format.js {}
    format.html { redirect_to @investment, notice: 'Investment was successfully created.' }
    format.json { render :show, status: :created, location: @investment }
  else
    format.html { render :new }
    format.json { render json: @investment.errors, status: :unprocessable_entity }
  end
end

在create.js.erb中,我只想刷新原始proj_investments部分中的所有内容。但是,当我加载它时,它给了我一个&#34;未定义的方法`投资&#39;&#34;使用此代码时出错:

Create.js.erb

$("#investments-container").html("<%= escape_javascript(render :partial => 'projects/proj_investments', :formats => :html)%>"); 

认为这里发生的事情是Rails部分已经渲染,所以我试图利用不再可以通过AJAX访问的Project,Reward和Investment等对象。也许我需要以某种方式传递这些对象来渲染局部。但我不知道如何做到这一点。或者,如果我在概念上错了,那也很高兴知道!

谢谢, 麦克

添加模型:

class Project < ActiveRecord::Base
    belongs_to :user
    belongs_to :genre 
    has_many :rewards, dependent: :destroy
    has_many :investments, through: :rewards
    has_many :collaborators
    has_attached_file :image, :styles => { :large => "600x600>", :medium => "300x300>", :thumb => "100x100>" }
    validates_attachment_content_type :image, :content_type => ["image/jpg", "image/jpeg", "image/png"]
    validates :image, presence: true
    accepts_nested_attributes_for :rewards,
        reject_if: proc { |attributes| attributes['name'].blank? },
        allow_destroy: true
    accepts_nested_attributes_for :collaborators,
        reject_if: proc { |attributes| attributes['last'].blank? },
        allow_destroy: true
end

class Investment < ActiveRecord::Base
  belongs_to :user
  belongs_to :reward
  belongs_to :project
end

class Reward < ActiveRecord::Base
  belongs_to :project
  belongs_to :rewardtype
  has_many :investments, dependent: :destroy
  validates :rewardtype, presence: true
  validates :name,
        presence: true
end

下面的完整堆栈跟踪:

D, [2016-01-28T21:44:45.289613 #50185] DEBUG -- : 
D, [2016-01-28T21:44:45.289663 #50185] DEBUG -- : 
D, [2016-01-28T21:44:45.289679 #50185] DEBUG -- : 
D, [2016-01-28T21:44:45.289689 #50185] DEBUG -- : 
I, [2016-01-28T21:44:45.289850 #50185]  INFO -- : Started GET "/projects/28" for ::1 at 2016-01-28 21:44:45 -0800
I, [2016-01-28T21:44:45.289887 #50185]  INFO -- : Started GET "/projects/28" for ::1 at 2016-01-28 21:44:45 -0800
D, [2016-01-28T21:44:45.298245 #50185] DEBUG -- :   ActiveRecord::SchemaMigration Load (0.1ms)  SELECT "schema_migrations".* FROM "schema_migrations"
D, [2016-01-28T21:44:45.298297 #50185] DEBUG -- :   ActiveRecord::SchemaMigration Load (0.1ms)  SELECT "schema_migrations".* FROM "schema_migrations"
I, [2016-01-28T21:44:45.326787 #50185]  INFO -- : Processing by ProjectsController#show as HTML
I, [2016-01-28T21:44:45.326853 #50185]  INFO -- : Processing by ProjectsController#show as HTML
I, [2016-01-28T21:44:45.326896 #50185]  INFO -- :   Parameters: {"id"=>"28"}
I, [2016-01-28T21:44:45.326923 #50185]  INFO -- :   Parameters: {"id"=>"28"}
D, [2016-01-28T21:44:45.349554 #50185] DEBUG -- :   Project Load (0.2ms)  SELECT  "projects".* FROM "projects" WHERE "projects"."id" = ? LIMIT 1  [["id", 28]]
D, [2016-01-28T21:44:45.349601 #50185] DEBUG -- :   Project Load (0.2ms)  SELECT  "projects".* FROM "projects" WHERE "projects"."id" = ? LIMIT 1  [["id", 28]]
D, [2016-01-28T21:44:45.375951 #50185] DEBUG -- :   User Load (0.1ms)  SELECT  "users".* FROM "users" WHERE "users"."id" = ? LIMIT 1  [["id", 2]]
D, [2016-01-28T21:44:45.376001 #50185] DEBUG -- :   User Load (0.1ms)  SELECT  "users".* FROM "users" WHERE "users"."id" = ? LIMIT 1  [["id", 2]]
D, [2016-01-28T21:44:45.418778 #50185] DEBUG -- :    (0.2ms)  SELECT SUM("investments"."amount") FROM "investments" INNER JOIN "rewards" ON "investments"."reward_id" = "rewards"."id" WHERE "rewards"."project_id" = ?  [["project_id", 28]]
D, [2016-01-28T21:44:45.418823 #50185] DEBUG -- :    (0.2ms)  SELECT SUM("investments"."amount") FROM "investments" INNER JOIN "rewards" ON "investments"."reward_id" = "rewards"."id" WHERE "rewards"."project_id" = ?  [["project_id", 28]]
D, [2016-01-28T21:44:45.438045 #50185] DEBUG -- :   Reward Exists (0.1ms)  SELECT  1 AS one FROM "rewards" WHERE "rewards"."project_id" = ? LIMIT 1  [["project_id", 28]]
D, [2016-01-28T21:44:45.438090 #50185] DEBUG -- :   Reward Exists (0.1ms)  SELECT  1 AS one FROM "rewards" WHERE "rewards"."project_id" = ? LIMIT 1  [["project_id", 28]]
D, [2016-01-28T21:44:45.438824 #50185] DEBUG -- :   Reward Load (0.1ms)  SELECT "rewards".* FROM "rewards" WHERE "rewards"."project_id" = ?  [["project_id", 28]]
D, [2016-01-28T21:44:45.438858 #50185] DEBUG -- :   Reward Load (0.1ms)  SELECT "rewards".* FROM "rewards" WHERE "rewards"."project_id" = ?  [["project_id", 28]]
D, [2016-01-28T21:44:45.448028 #50185] DEBUG -- :   Rewardtype Load (0.1ms)  SELECT  "rewardtypes".* FROM "rewardtypes" WHERE "rewardtypes"."id" = ? LIMIT 1  [["id", 2]]
D, [2016-01-28T21:44:45.448074 #50185] DEBUG -- :   Rewardtype Load (0.1ms)  SELECT  "rewardtypes".* FROM "rewardtypes" WHERE "rewardtypes"."id" = ? LIMIT 1  [["id", 2]]
D, [2016-01-28T21:44:45.453290 #50185] DEBUG -- :    (0.2ms)  SELECT COUNT("investments"."amount") FROM "investments" WHERE "investments"."reward_id" = ?  [[nil, 50]]
D, [2016-01-28T21:44:45.453370 #50185] DEBUG -- :    (0.2ms)  SELECT COUNT("investments"."amount") FROM "investments" WHERE "investments"."reward_id" = ?  [[nil, 50]]
D, [2016-01-28T21:44:45.455273 #50185] DEBUG -- :    (0.3ms)  SELECT SUM("investments"."amount") FROM "investments" WHERE "investments"."reward_id" = ?  [[nil, 50]]
D, [2016-01-28T21:44:45.455328 #50185] DEBUG -- :    (0.3ms)  SELECT SUM("investments"."amount") FROM "investments" WHERE "investments"."reward_id" = ?  [[nil, 50]]
D, [2016-01-28T21:44:45.476845 #50185] DEBUG -- :   User Load (0.2ms)  SELECT  "users".* FROM "users" WHERE "users"."id" = ?  ORDER BY "users"."id" ASC LIMIT 1  [["id", 2]]
D, [2016-01-28T21:44:45.476897 #50185] DEBUG -- :   User Load (0.2ms)  SELECT  "users".* FROM "users" WHERE "users"."id" = ?  ORDER BY "users"."id" ASC LIMIT 1  [["id", 2]]
D, [2016-01-28T21:44:45.478277 #50185] DEBUG -- :   Rewardtype Load (0.1ms)  SELECT  "rewardtypes".* FROM "rewardtypes" WHERE "rewardtypes"."id" = ? LIMIT 1  [["id", 3]]
D, [2016-01-28T21:44:45.478313 #50185] DEBUG -- :   Rewardtype Load (0.1ms)  SELECT  "rewardtypes".* FROM "rewardtypes" WHERE "rewardtypes"."id" = ? LIMIT 1  [["id", 3]]
D, [2016-01-28T21:44:45.479190 #50185] DEBUG -- :    (0.1ms)  SELECT COUNT("investments"."amount") FROM "investments" WHERE "investments"."reward_id" = ?  [[nil, 55]]
D, [2016-01-28T21:44:45.479218 #50185] DEBUG -- :    (0.1ms)  SELECT COUNT("investments"."amount") FROM "investments" WHERE "investments"."reward_id" = ?  [[nil, 55]]
D, [2016-01-28T21:44:45.479621 #50185] DEBUG -- :    (0.1ms)  SELECT SUM("investments"."amount") FROM "investments" WHERE "investments"."reward_id" = ?  [[nil, 55]]
D, [2016-01-28T21:44:45.479645 #50185] DEBUG -- :    (0.1ms)  SELECT SUM("investments"."amount") FROM "investments" WHERE "investments"."reward_id" = ?  [[nil, 55]]
D, [2016-01-28T21:44:45.481244 #50185] DEBUG -- :   CACHE (0.0ms)  SELECT  "rewardtypes".* FROM "rewardtypes" WHERE "rewardtypes"."id" = ? LIMIT 1  [["id", 2]]
D, [2016-01-28T21:44:45.481287 #50185] DEBUG -- :   CACHE (0.0ms)  SELECT  "rewardtypes".* FROM "rewardtypes" WHERE "rewardtypes"."id" = ? LIMIT 1  [["id", 2]]
D, [2016-01-28T21:44:45.482172 #50185] DEBUG -- :    (0.1ms)  SELECT COUNT("investments"."amount") FROM "investments" WHERE "investments"."reward_id" = ?  [[nil, 56]]
D, [2016-01-28T21:44:45.482204 #50185] DEBUG -- :    (0.1ms)  SELECT COUNT("investments"."amount") FROM "investments" WHERE "investments"."reward_id" = ?  [[nil, 56]]
D, [2016-01-28T21:44:45.482744 #50185] DEBUG -- :    (0.1ms)  SELECT SUM("investments"."amount") FROM "investments" WHERE "investments"."reward_id" = ?  [[nil, 56]]
D, [2016-01-28T21:44:45.482779 #50185] DEBUG -- :    (0.1ms)  SELECT SUM("investments"."amount") FROM "investments" WHERE "investments"."reward_id" = ?  [[nil, 56]]
D, [2016-01-28T21:44:45.484161 #50185] DEBUG -- :   CACHE (0.0ms)  SELECT  "rewardtypes".* FROM "rewardtypes" WHERE "rewardtypes"."id" = ? LIMIT 1  [["id", 3]]
D, [2016-01-28T21:44:45.484191 #50185] DEBUG -- :   CACHE (0.0ms)  SELECT  "rewardtypes".* FROM "rewardtypes" WHERE "rewardtypes"."id" = ? LIMIT 1  [["id", 3]]
D, [2016-01-28T21:44:45.484953 #50185] DEBUG -- :    (0.1ms)  SELECT COUNT("investments"."amount") FROM "investments" WHERE "investments"."reward_id" = ?  [[nil, 57]]
D, [2016-01-28T21:44:45.484984 #50185] DEBUG -- :    (0.1ms)  SELECT COUNT("investments"."amount") FROM "investments" WHERE "investments"."reward_id" = ?  [[nil, 57]]
D, [2016-01-28T21:44:45.485425 #50185] DEBUG -- :    (0.1ms)  SELECT SUM("investments"."amount") FROM "investments" WHERE "investments"."reward_id" = ?  [[nil, 57]]
D, [2016-01-28T21:44:45.485451 #50185] DEBUG -- :    (0.1ms)  SELECT SUM("investments"."amount") FROM "investments" WHERE "investments"."reward_id" = ?  [[nil, 57]]
I, [2016-01-28T21:44:45.486265 #50185]  INFO -- :   Rendered projects/_proj_investments.html.erb (93.5ms)
I, [2016-01-28T21:44:45.486298 #50185]  INFO -- :   Rendered projects/_proj_investments.html.erb (93.5ms)
I, [2016-01-28T21:44:45.486347 #50185]  INFO -- :   Rendered projects/show.html.erb within layouts/application (123.7ms)
I, [2016-01-28T21:44:45.486419 #50185]  INFO -- :   Rendered projects/show.html.erb within layouts/application (123.7ms)
I, [2016-01-28T21:44:46.135983 #50185]  INFO -- :   Rendered layouts/_header.html.erb (1.0ms)
I, [2016-01-28T21:44:46.136035 #50185]  INFO -- :   Rendered layouts/_header.html.erb (1.0ms)
I, [2016-01-28T21:44:46.136408 #50185]  INFO -- : Completed 200 OK in 809ms (Views: 778.2ms | ActiveRecord: 3.3ms)
I, [2016-01-28T21:44:46.136454 #50185]  INFO -- : Completed 200 OK in 809ms (Views: 778.2ms | ActiveRecord: 3.3ms)
D, [2016-01-28T21:44:58.979348 #50185] DEBUG -- : 
D, [2016-01-28T21:44:58.979399 #50185] DEBUG -- : 
D, [2016-01-28T21:44:58.979420 #50185] DEBUG -- : 
D, [2016-01-28T21:44:58.979434 #50185] DEBUG -- : 
I, [2016-01-28T21:44:58.979548 #50185]  INFO -- : Started POST "/investments" for ::1 at 2016-01-28 21:44:58 -0800
I, [2016-01-28T21:44:58.979579 #50185]  INFO -- : Started POST "/investments" for ::1 at 2016-01-28 21:44:58 -0800
I, [2016-01-28T21:44:58.986293 #50185]  INFO -- : Processing by InvestmentsController#create as JS
I, [2016-01-28T21:44:58.986368 #50185]  INFO -- : Processing by InvestmentsController#create as JS
I, [2016-01-28T21:44:58.986441 #50185]  INFO -- :   Parameters: {"utf8"=>"✓", "investment"=>{"amount"=>"50", "User_id"=>"2", "Reward_id"=>"50"}, "commit"=>"INVEST"}
I, [2016-01-28T21:44:58.986457 #50185]  INFO -- :   Parameters: {"utf8"=>"✓", "investment"=>{"amount"=>"50", "User_id"=>"2", "Reward_id"=>"50"}, "commit"=>"INVEST"}
D, [2016-01-28T21:44:58.987691 #50185] DEBUG -- :    (0.1ms)  begin transaction
D, [2016-01-28T21:44:58.987725 #50185] DEBUG -- :    (0.1ms)  begin transaction
D, [2016-01-28T21:44:58.991624 #50185] DEBUG -- :   SQL (0.4ms)  INSERT INTO "investments" ("User_id", "Reward_id", "amount", "created_at", "updated_at") VALUES (?, ?, ?, ?, ?)  [["User_id", 2], ["Reward_id", 50], ["amount", 50.0], ["created_at", "2016-01-29 05:44:58.990349"], ["updated_at", "2016-01-29 05:44:58.990349"]]
D, [2016-01-28T21:44:58.991667 #50185] DEBUG -- :   SQL (0.4ms)  INSERT INTO "investments" ("User_id", "Reward_id", "amount", "created_at", "updated_at") VALUES (?, ?, ?, ?, ?)  [["User_id", 2], ["Reward_id", 50], ["amount", 50.0], ["created_at", "2016-01-29 05:44:58.990349"], ["updated_at", "2016-01-29 05:44:58.990349"]]
D, [2016-01-28T21:44:58.992612 #50185] DEBUG -- :    (0.6ms)  commit transaction
D, [2016-01-28T21:44:58.992677 #50185] DEBUG -- :    (0.6ms)  commit transaction
I, [2016-01-28T21:44:59.002803 #50185]  INFO -- :   Rendered projects/_proj_investments.html.erb (3.3ms)
I, [2016-01-28T21:44:59.002882 #50185]  INFO -- :   Rendered projects/_proj_investments.html.erb (3.3ms)
I, [2016-01-28T21:44:59.002941 #50185]  INFO -- :   Rendered investments/create.js.erb (4.6ms)
I, [2016-01-28T21:44:59.002974 #50185]  INFO -- :   Rendered investments/create.js.erb (4.6ms)
I, [2016-01-28T21:44:59.003170 #50185]  INFO -- : Completed 500 Internal Server Error in 17ms (ActiveRecord: 1.1ms)
I, [2016-01-28T21:44:59.003204 #50185]  INFO -- : Completed 500 Internal Server Error in 17ms (ActiveRecord: 1.1ms)
F, [2016-01-28T21:44:59.004536 #50185] FATAL -- :
ActionView::Template::Error (undefined method `investments' for nil:NilClass):
1: <div class="panel panel-default project-rightpanel">
2:       <div class="project-rightpanel-header">
3:         <span class="project-rightpanel-header amount"><%=number_to_currency(@project.investments.sum(:amount),precision: 0)%></span> of <span class="project-rightpanel-header amount">$20,000</span> raised in 15 days
4:       </div>
5:       <div id="projectprogress"></div>
6:       <div class="project-rightpanel-header">
app/views/projects/_proj_investments.html.erb:3:in         `_app_views_projects__proj_investments_html_erb__2910721485294471226_70328031908000'
app/views/investments/create.js.erb:1:in `_app_views_investments_create_js_erb__4066473719869479756_70328057899160'


F, [2016-01-28T21:44:59.004591 #50185] FATAL -- : 

ActionView :: Template :: Error(未定义方法investments' for nil:NilClass): 1: <div class="panel panel-default project-rightpanel"> 2: <div class="project-rightpanel-header"> 3: <span class="project-rightpanel-header amount"><%=number_to_currency(@project.investments.sum(:amount),precision: 0)%></span> of <span class="project-rightpanel-header amount">$20,000</span> raised in 15 days 4: </div> 5: <div id="projectprogress"></div> 6: <div class="project-rightpanel-header"> app/views/projects/_proj_investments.html.erb:3:in _ app_views_projects__proj_investments_html_erb__29107214852944712​​26_70328031908000&#39;   app / views / investments / create.js.erb:1:在`_app_views_investments_create_js_erb__4066473719869479756_70328057899160&#39;

I, [2016-01-28T21:44:59.114304 #50185]  INFO -- :   Rendered /Users/mikelincoln/.rvm/gems/ruby-2.2.1/gems/actionpack-4.2.4/lib/action_dispatch/middleware/templates/rescues/_trace.text.erb (0.5ms)
I, [2016-01-28T21:44:59.114355 #50185]  INFO -- :   Rendered /Users/mikelincoln/.rvm/gems/ruby-2.2.1/gems/actionpack-4.2.4/lib/action_dispatch/middleware/templates/rescues/_trace.text.erb (0.5ms)
I, [2016-01-28T21:44:59.126017 #50185]  INFO -- :   Rendered /Users/mikelincoln/.rvm/gems/ruby-2.2.1/gems/actionpack-4.2.4/lib/action_dispatch/middleware/templates/rescues/_request_and_response.text.erb (0.6ms)
I, [2016-01-28T21:44:59.126055 #50185]  INFO -- :   Rendered /Users/mikelincoln/.rvm/gems/ruby-2.2.1/gems/actionpack-4.2.4/lib/action_dispatch/middleware/templates/rescues/_request_and_response.text.erb (0.6ms)
I, [2016-01-28T21:44:59.126101 #50185]  INFO -- :   Rendered /Users/mikelincoln/.rvm/gems/ruby-2.2.1/gems/actionpack-4.2.4/lib/action_dispatch/middleware/templates/rescues/template_error.text.erb (24.6ms)
I, [2016-01-28T21:44:59.126152 #50185]  INFO -- :   Rendered /Users/mikelincoln/.rvm/gems/ruby-2.2.1/gems/actionpack-4.2.4/lib/action_dispatch/middleware/templates/rescues/template_error.text.erb (24.6ms)
I, [2016-01-28T21:44:59.144002 #50185]  INFO -- :   Rendered /Users/mikelincoln/.rvm/gems/ruby-2.2.1/gems/web-console-2.2.1/lib/web_console/templates/_markup.html.erb (0.3ms)
I, [2016-01-28T21:44:59.144052 #50185]  INFO -- :   Rendered /Users/mikelincoln/.rvm/gems/ruby-2.2.1/gems/web-console-2.2.1/lib/web_console/templates/_markup.html.erb (0.3ms)
I, [2016-01-28T21:44:59.166877 #50185]  INFO -- :   Rendered /Users/mikelincoln/.rvm/gems/ruby-2.2.1/gems/web-console-2.2.1/lib/web_console/templates/_inner_console_markup.html.erb within layouts/inlined_string (0.3ms)
I, [2016-01-28T21:44:59.166935 #50185]  INFO -- :   Rendered /Users/mikelincoln/.rvm/gems/ruby-2.2.1/gems/web-console-2.2.1/lib/web_console/templates/_inner_console_markup.html.erb within layouts/inlined_string (0.3ms)
I, [2016-01-28T21:44:59.177608 #50185]  INFO -- :   Rendered /Users/mikelincoln/.rvm/gems/ruby-2.2.1/gems/web-console-2.2.1/lib/web_console/templates/_prompt_box_markup.html.erb within layouts/inlined_string (0.2ms)
I, [2016-01-28T21:44:59.177656 #50185]  INFO -- :   Rendered /Users/mikelincoln/.rvm/gems/ruby-2.2.1/gems/web-console-2.2.1/lib/web_console/templates/_prompt_box_markup.html.erb within layouts/inlined_string (0.2ms)
I, [2016-01-28T21:44:59.187782 #50185]  INFO -- :   Rendered /Users/mikelincoln/.rvm/gems/ruby-2.2.1/gems/web-console-2.2.1/lib/web_console/templates/style.css.erb within layouts/inlined_string (0.3ms)
I, [2016-01-28T21:44:59.187836 #50185]  INFO -- :   Rendered /Users/mikelincoln/.rvm/gems/ruby-2.2.1/gems/web-console-2.2.1/lib/web_console/templates/style.css.erb within layouts/inlined_string (0.3ms)
I, [2016-01-28T21:44:59.188232 #50185]  INFO -- :   Rendered /Users/mikelincoln/.rvm/gems/ruby-2.2.1/gems/web-console-2.2.1/lib/web_console/templates/console.js.erb within layouts/javascript (33.9ms)
I, [2016-01-28T21:44:59.188272 #50185]  INFO -- :   Rendered /Users/mikelincoln/.rvm/gems/ruby-2.2.1/gems/web-console-2.2.1/lib/web_console/templates/console.js.erb within layouts/javascript (33.9ms)
I, [2016-01-28T21:44:59.198215 #50185]  INFO -- :   Rendered /Users/mikelincoln/.rvm/gems/ruby-2.2.1/gems/web-console-2.2.1/lib/web_console/templates/main.js.erb within layouts/javascript (0.2ms)
I, [2016-01-28T21:44:59.198255 #50185]  INFO -- :   Rendered /Users/mikelincoln/.rvm/gems/ruby-2.2.1/gems/web-console-2.2.1/lib/web_console/templates/main.js.erb within layouts/javascript (0.2ms)
I, [2016-01-28T21:44:59.209355 #50185]  INFO -- :   Rendered /Users/mikelincoln/.rvm/gems/ruby-2.2.1/gems/web-console-2.2.1/lib/web_console/templates/error_page.js.erb within layouts/javascript (0.4ms)
I, [2016-01-28T21:44:59.209420 #50185]  INFO -- :   Rendered /Users/mikelincoln/.rvm/gems/ruby-2.2.1/gems/web-console-2.2.1/lib/web_console/templates/error_page.js.erb within layouts/javascript (0.4ms)
I, [2016-01-28T21:44:59.210343 #50185]  INFO -- :   Rendered /Users/mikelincoln/.rvm/gems/ruby-2.2.1/gems/web-console-2.2.1/lib/web_console/templates/index.html.erb (74.6ms)
I, [2016-01-28T21:44:59.210453 #50185]  INFO -- :   Rendered /Users/mikelincoln/.rvm/gems/ruby-2.2.1/gems/web-console-2.2.1/lib/web_console/templates/index.html.erb (74.6ms)

2 个答案:

答案 0 :(得分:1)

您的错误是<%=number_to_currency(@project.investments.sum(:amount),precision: 0)。当您从create.js.erb呈现部分时,没有为ivar @project分配值,这就是nil的原因。您需要为其指定一个值。

错误回溯的修复似乎是:

def create
  @investment = Investment.new(investment_params)

  respond_to do |format|
    if @investment.save
      @project = @investment.reload.project
      format.js {}
      format.html { redirect_to @investment, notice: 'Investment was successfully created.' }
      format.json { render :show, status: :created, location: @investment }
    else
      format.html { render :new }
      format.json { render json: @investment.errors, status: :unprocessable_entity }
  end
end

答案 1 :(得分:0)

要添加到Arup的答案,错误如下:

  

ActionView :: Template :: Error(未定义的方法&#39;投资&#39;对于nil:NilClass):

     

<%= number_to_currency(@project.investments.sum(:amount),precision: 0) %>

问题是您没有定义@project(如上所述)。

解决方案是确保create操作填充@project

实现这一目标的最佳方法是使用nested resources为项目创建投资

#config/routes.rb
resources :projects do
   resources :investments, only: :create #-> url.com/projects/:project_id/investments
end

#app/controllers/projects_controller.rb
def create
  @project    = Project.find params[:project_id]
  @investment = @project.investments.new investment_params

您必须使用以下investments#new方法(您尚未共享):

<%= form_for [@project, @investment] do |f| %>

IE - 通过对每个investments#create 路由相应的project