使用:include_blank删除rails关系

时间:2012-10-26 20:42:16

标签: ruby-on-rails

我希望能够选择一个空白对象并将其发布,以便我可以清除轨道关系。默认情况下,当您在:include_blank条目上选择POST时,没有任何内容被发布,因此它不会删除旧关系。所以我试图在数组中添加一个0 id空白项。

原件:

<%= select_f f,:config_template_id, @operatingsystem.config_templates.where(:template_kind_id => f.object.template_kind_id), :id, :name, {:include_blank => true}, { :label => f.object.template_kind } %>

矿:

<%= select_f f,:config_template_id, @operatingsystem.config_templates.where(:template_kind_id => f.object.template_kind_id).collect { |c| [c.name, c.id]}.insert(0, ['', 0]) %>

虽然我得到了“错误的参数数量(3个为5)”错误但无法弄清楚我错过了什么。有什么指针吗? (我也无法在网络上的任何地方找到select_f,我认为谷歌忽略了_所以搜索是开放的方式...对于rails 3我应该使用其他东西吗?)

1 个答案:

答案 0 :(得分:1)

您已经省略了传入原始代码块的第3,第4,第5和第6个参数。无论select_f是什么,它至少需要5个参数。在原文中,您将以下内容传递给select_f (为清晰起见,每行一个参数)

f,
:config_template_id, 
@operatingsystem.config_templates.where(:template_kind_id => f.object.template_kind_id), 
:id, 
:name, 
{:include_blank => true}, 
{ :label => f.object.template_kind }

在新的(已损坏)电话中,您只能传递

f, 
:config_template_id, 
@operatingsystem.config_templates.where(:template_kind_id => f.object.template_kind_id).collect { |c| [c.name, c.id]}.insert(0, ['', 0])

使用第一个方法调用,只需替换第三个参数。

f,
:config_template_id, 
@operatingsystem.config_templates.where(:template_kind_id => f.object.template_kind_id).collect { |c| [c.name, c.id]}.insert(0, ['', 0])
:id, 
:name, 
{:include_blank => true}, 
{ :label => f.object.template_kind }

最后,如果您不希望传递:include_blank => true,但仍然想要标签,只需将nil{}传递给第5个参数

f,
:config_template_id, 
@operatingsystem.config_templates.where(:template_kind_id => f.object.template_kind_id).collect { |c| [c.name, c.id]}.insert(0, ['', 0])
:id, 
:name, 
nil,
{ :label => f.object.template_kind }

完全在一条线上:

<%= select_f f, :config_template_id, @operatingsystem.config_templates.where(:template_kind_id => f.object.template_kind_id).collect { |c| [c.name, c.id]}.insert(0, ['', 0]), :id, :name, nil, { :label => f.object.template_kind } %>

我无法保证这一点有效,因为我不知道select_f的API在哪里,或者您是自己创建的。但是,这应该使你朝着正确的方向前进。