Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 如何使用对象的“创建”操作中的对象的新实例渲染分部';Rails中的控制器是什么?_Ruby On Rails_Partials - Fatal编程技术网

Ruby on rails 如何使用对象的“创建”操作中的对象的新实例渲染分部';Rails中的控制器是什么?

Ruby on rails 如何使用对象的“创建”操作中的对象的新实例渲染分部';Rails中的控制器是什么?,ruby-on-rails,partials,Ruby On Rails,Partials,我的应用程序中有一系列硬编码问题。SaleQualifier会选择每个问题,并根据答案(SaleQualifier有一个答案)决定接下来向用户呈现哪个问题 SaleQualifier属于SalesOpportunity——问题和答案字段都呈现在my SalesOpportunity show页面的部分中。当我每次回答问题时都重新加载整个页面时,这很好,但我想在SaleQualifier视图中使用remote:true链接和create.js.erb文件来呈现下一部分而不刷新整页 销售机会控制员:

我的应用程序中有一系列硬编码问题。SaleQualifier会选择每个问题,并根据答案(SaleQualifier有一个答案)决定接下来向用户呈现哪个问题

SaleQualifier
属于SalesOpportunity
——问题和答案字段都呈现在my SalesOpportunity show页面的部分中。当我每次回答问题时都重新加载整个页面时,这很好,但我想在SaleQualifier视图中使用
remote:true
链接和
create.js.erb
文件来呈现下一部分而不刷新整页

销售机会控制员:

  # GET /sales_opportunities/1
# GET /sales_opportunities/1.json
def show
 @sales_opportunity = SalesOpportunity.includes(:company, :user, :timeline_events, :sale_contacts, :swots, :sale_competitors).find(params[:id])
 @sale_qualifier = SaleQualifier.new(sales_opportunity_id: params[@sales_opportunity.id])
  @answer = @sale_qualifier.build_answer
 @question = find_current_question
end
<div class="panel panel-default">
 <%= form_for(@sale_qualifier, :html => {role: :form, 'data-model' => 'sale_qualifier'}, remote: true) do |f| %>
  <% if @sale_qualifier.errors.any? %>
   <div id="error_explanation">
    <h2><%= pluralize(@sale_qualifier.errors.count, "error") %> prohibited this answer from being saved:</h2>
    <ul>
    <% @sale_qualifier.errors.full_messages.each do |message| %>
      <li><%= message %></li>
    <% end %>
    </ul>
  </div>
<% end %>
<div class="panel-body">
  <div class="col-sm-6">
    <h2><%= @question.question_text %></h2>
  </div>
  <div class="col-sm-6">
    <div class="form-group">
      <%= f.hidden_field :sales_opportunity_id, :value => @sales_opportunity.id %>
    </div>
    <div class="form-group">
      <%= f.hidden_field :question_id, :value => @question.id %>
    </div>
    <%= f.fields_for :answer do |answer| %>
      <% if @question.answer_type == 'Text Field' %>
        <%= answer.text_area :answer_text, :placeholder => "Enter your answer" %>
      <% end %>
      <% if @question.answer_type == 'Datetime' %>
      <div class='input-group date' id='datetimepicker' data-date-format="YY.MM.DD">
        <%= answer.text_field :answer_text, class: "form-control", data: { date_format: 'YYYY/MM/DD' }, :placeholder => "YYYY/MM/DD" %>
        <span class="input-group-addon">
          <span class="glyphicon glyphicon-calendar"></span>
         </span>
      </div>
        <% end %>
        <% if @question.answer_type == 'Boolean' %>
          <%= answer.select :answer_text, [['Yes', true], ['No', false]] %>
        <% end %>
        <% if @question.answer_type == 'Update' %>
          <%= answer.hidden_field :answer_text, :value => "Updated" %>
        <% end %>
    <% end %>
      <% if @question.answer_type == 'Update' %>
        <div class="actions">
          <%= f.submit "Done", class: "btn btn-large btn-success"%>
        </div>
      <% else %>
        <div class="actions">
          <%= f.submit "Submit", class: "btn btn-large btn-success"%>
        </div>
      <% end %>
    <% end %>
  </div>
 </div>
</div>
如您所见,我在这里设置了一个新的SaleQualifier,为它构建一个答案,并使用以下方法找到相关问题:

 def find_current_question
  question = Question.find(@sales_opportunity.next_question)
  return question
end
部分代码如下所示(我尝试过传递局部变量,但这不起作用,因为我认为问题出在SaleQualifier控制器的创建操作中):

我相信我的问题就出在这里——因为部分人希望看到@sale_限定符符合在我的SalesOpportunity show操作中设置的定义,但是这里的@sale_限定符指的是该模型新保存的实例。因此,当我尝试使用remote:true set时,会出现以下错误:

ActionView::Template::Error (undefined method `question_text' for nil:NilClass):
12:     <% end %>
13:     <div class="panel-body">
14:       <div class="col-sm-6">
15:         <h2><%= @question.question_text %></h2>
16:       </div>
17:       <div class="col-sm-6">
18:         <div class="form-group">
app/views/sale_qualifiers/_qualify.html.erb:15:in `block in _app_views_sale_qualifiers__qualify_html_erb__3308770490925429645_70100598754380'
app/views/sale_qualifiers/_qualify.html.erb:2:in `_app_views_sale_qualifiers__qualify_html_erb__3308770490925429645_70100598754380'
app/views/sale_qualifiers/create.js.erb:2:in `_app_views_sale_qualifiers_create_js_erb__2206693572750561934_70100598786040'
app/controllers/sale_qualifiers_controller.rb:32:in `create'
ActionView::Template::Error(nil:NilClass的未定义方法'question\u text':
12:     
13:     
14:       
15:         
16:       
17:       
18:         
app/views/sale_qualifiers/_qualifiers.html.erb:15:in`block in_app_views_sale_qualifiers_uuuqualifiers_uuuhtml_uuuu330877704095429645_70100598754380'
app/views/sale\u qualifiers/\u qualifiers.html.erb:2:在“app\u views\u sale\u qualifiers\u qualifiers\u html\u erb\330870490925429645\u 70100598754380”中
app/views/sale\u-qualifiers/create.js.erb:2:in``应用程序视图\u-sale\u-qualifiers\u-create\u-js\u-erb\uu 2206693572750561934\u 70100598786040'
app/controllers/sale\u qualifiers\u controller.rb:32:in'create'
create.js.erb代码:

//update the sale qualifier div with the next question
$('#sale_qualifier_div').html("<%= escape_javascript(render :partial => 'sale_qualifiers/qualify', :locals => { :sale_qualifier => @sale_qualifier, :answer => @answer, :question => @question} )%>");
//使用下一个问题更新sale qualifier div
$(“#sale_qualifier_div”).html(“‘sale_qualifiers/qualifier’,:locals=>{:sale_qualifier=>@sale_qualifier,:answer=>@answer,:question=>@question})%>”;

有没有办法把这些变量传递给这个局部变量

我已经通过使用传递到format.js操作的块解决了这个问题(但如果有人能告诉我为什么这是个坏主意/给我一个更好的选项,我将不胜感激),我在该操作中重置了以下实例变量:

    format.js {
      @sales_opportunity = SalesOpportunity.find_by(id: session[:sales_opportunity_id])
      @sale_qualifier = SaleQualifier.new(sales_opportunity_id: params[@sales_opportunity.id])
      @answer = @sale_qualifier.build_answer
      @question = Question.find(@sales_opportunity.next_question)
    }
这种方法有效,但感觉很难闻

    format.js {
      @sales_opportunity = SalesOpportunity.find_by(id: session[:sales_opportunity_id])
      @sale_qualifier = SaleQualifier.new(sales_opportunity_id: params[@sales_opportunity.id])
      @answer = @sale_qualifier.build_answer
      @question = Question.find(@sales_opportunity.next_question)
    }