Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/62.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 4控制器中的每个循环用于创建新的实例变量_Ruby On Rails - Fatal编程技术网

Ruby on rails Rails 4控制器中的每个循环用于创建新的实例变量

Ruby on rails Rails 4控制器中的每个循环用于创建新的实例变量,ruby-on-rails,Ruby On Rails,我有一个父表单lead和子表单QuoteMetal,在同一次提交中呈现多次。表单中的所有信息都会写入各自的数据表,但我需要子表单中的信息来执行查询并返回这些值。我创建了表单和一个控制器,该控制器将信息写入数据表 我需要帮助为每个子窗体生成查询结果,然后在视图中访问它们。这是我目前拥有的 class LeadsController < ApplicationController def index @lead = Lead.new @quote_metal = @lea

我有一个父表单lead和子表单QuoteMetal,在同一次提交中呈现多次。表单中的所有信息都会写入各自的数据表,但我需要子表单中的信息来执行查询并返回这些值。我创建了表单和一个控制器,该控制器将信息写入数据表

我需要帮助为每个子窗体生成查询结果,然后在视图中访问它们。这是我目前拥有的

class LeadsController < ApplicationController

  def index
    @lead = Lead.new
    @quote_metal = @lead.quote_metals.build
  end

  def create
    #raise params.inspect
    @lead = Lead.create!(lead_params) #write to data tables (which works)
    @lead.quote_metals.each do |f|
      @metal = Metal.calculate_metal(f).first #here is where my problem is! the     #calculate_metal is the query located in my model
    end
  end

  def show
  end

private

    def lead_params
        params.require(:lead).permit([:name, ..... 
            quote_metals_attributes: [:id...],
      quote_melees_attributes: [:shape...],
      quote_diamonds_attributes: [:shape...]
      ])
    end

end
以及以下观点:

<div class='container'>
  <div class="row">
    <div class='col-sm-3 col-sm-offset-2'>
      <h3 class="text-center">Your Search: </h3>
    </div>
    <div class='col-sm-5'>
        <h4 class="text-center">Returning estimates for a <%= @metal.metal %> setting
       weighing <%= @metal.weight %> <%= @metal.unit %>. I am paying
       <%= number_to_currency(@metal.price, precision: 2) %> per <%= @metal.unit %>.</h4>
    </div>
  </div>
对QuoteMetal实例的操作应在QuoteMetal类中处理。因此,我将替换:

@lead.quote_metals.each do |f|
  @metal = Metal.calculate_metal(f).first #here is where my problem is! the     #calculate_metal is the query located in my model
end
与:

然后在QuoteMetal类中,您可以使用回调并在那里执行计算。请记住,这将在每次保存或更新QuoteMetal时调用calculate

更好的做法是在Lead模型中使用accepts_nested_attributes_,以便在创建Lead时自动创建quote_金属。请参阅Rails文档。使用这种方法,您可以消除控制器中的上述三行,但仍然需要QuoteMetal类中的回调来执行自定义计算


另外,请注意您要创建的调用!如果验证失败,将引发异常。不确定您是否有意这样做。

我在Lead模型中为其执行accepts_nested_attributes_。我想知道如何对@lead.quote_metals的每个实例进行查询,以及如何在视图中引用这些查询和结果。抱歉,我不清楚。您需要重定向到其他操作或呈现其他视图。例如,如果@lead已创建的lead实例与关联的quote_金属实例,则可以在成功创建lead后呈现“show”,以显示lead和关联的quote_金属。
@lead.quote_metals.each do |f|
  f.create
end