我的jobplan
控制器中有代码。它正在创建jobtasks
。
这是代码:
@jobplan.jobtasks.each do |jobtask|
@jobtask = Jobtask.where("id = ?", jobtask)
@task = Task.create(@jobtask.attributes)
end
问题1:
有没有办法从新jobtask
中排除task
属性?
问题2:
如何为task
jobtask
添加固定属性呢?
感谢您的帮助!
答案 0 :(得分:2)
问题1:
@jobtask.attributes
返回哈希值。所以你可以在哈希上做你能做的一切
Task.create(@jobtask.attributes.except(:attribute_name))
问题2:
Task.create(@jobtask.attributes.merge(:attribute_name => "value"))
答案 1 :(得分:2)
你可以这样做:
@jobplan.jobtasks.each do |jobtask|
jobtask_attrs = jobtask.attributes
jobtask_attrs.delete(:some_attribute) # Question 1
jobtask_attrs.merge!({ additionnal_attribute: "Hello world!" }) # Question 2
Task.create(jobtask_attrs)
end
注意:如果您想要取消属性的id
属性,请不要担心,ActiveRecord会在创建新记录时忽略它;)< / p>
我重构了您的代码以提高效率/可读性,如果您需要,可随意提问; - )
重构:
@jobplan.jobtasks
应该已经返回属于此Jobtask
的{{1}}对象,因此无需再向DB发送查询以便再次找回它Jobplan
)将在数组的每个循环中重写,最终创建一个共享变量@task
并用创建的任务填充它。