在rails中复制嵌套属性

时间:2015-05-08 02:33:55

标签: ruby-on-rails attributes nested

我正在尝试在模型中复制嵌套属性。通过GUI创建新对象时传递的参数是:

tenant_script_call“=> {”name“=>”TEST_01“,”script_id“=>”12“,”script_call_arguments_attributes“=> {”0“=> {”script_argument_id“=>” 16“,”argumentable_id“=>”43“,”argumentable_type“=>”AstQueue“},”1“=> {”script_argument_id“=>”17“,”value“=>”“} ,“2”=> {“script_argument_id”=>“18”,“value”=>“”},“3”=> {“script_argument_id”=>“19”,“argumentable_id”=> ;“250”,“argumentable_type”=>“播放列表”}}},“提交”=>“提交”}

我正在尝试在我的控制器中自动执行此操作。我试过了:

cashier[0].cashierclients.addLast(l.get(0));

// the error happens here
cashier[1].cashierclients.size();

以及一些不同的变化。有人可以指出我正确的方向或分享一些知识/智慧吗?

3 个答案:

答案 0 :(得分:0)

您可以创建私人方法

select employees.EmpID, sum(workhours.hoursworked) as 'TotalHours',
       firstname, lastname, 
       ISNULL(sum(workhours.hoursworked),0) * ISNULL(min(rate),0) AS 'TotalRate'
from employees inner join workhours
on employees.empid = WorkHours.EmpID
LEFT JOIN BillingRates ON employees.titleid=billingrates.titleid
AND employees.level = billingrates.level
where WH_Month = 4
group by LastName, firstname, employees.EmpID  

现在,只要你想创造。你这样做。

def tenant_params
   params.require(:tenant).permit(:column_names)
end

答案 1 :(得分:0)

首先,你的电话有点瑕疵。在这种情况下,locationself是什么?

您的模型定义应该是这样的:

class TenantScriptCall < ActiveRecord::Base
  has_many :script_call_arguments
  accepts_nested_attributes_for :script_call_arguments
end

然后,如果你想从UI传递输入:

TenantScriptCall.new(params[:tenant_script_call])

应该有用。

最终你应该用permit来过滤输入,就像@hemali指出的那样。

答案 2 :(得分:0)

这对我有用:

  def auto_create_destination_for_ast_queue(location)
    auto_destination_name_queue = AstQueue.last.name.split(/-/)[0]
    TenantScriptCall.new(:name => auto_destination_name_queue,
      :location_id => location.id, 
      :script_id => 12,
      :script_call_arguments_attributes => [{:script_argument_id => 16,
      :argumentable_id => AstQueue.last.id, 
      :argumentable_type => "AstQueue"}, 
        {:script_argument_id => 19, 
        :argumentable_id => 3, 
        :argumentable_type => "Playlist"}]).save
  end